力扣-437-统计路径和等于一个数的路径数量

题目:
437. Path Sum III (Easy)

解题思路:
这题也是用递归思路考虑,但是还要包括不从根节点开始的情况,所以要把不从根节点的情况单独划出来,看作是从原树的左、右子树的根节点继续考虑,查看代码更容易理解。
统计数量时,总数也应该是以上三部分之和。
还有题解说这里用到了前缀和的概念,可以参考这个题解

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Java:
public int pathSum(TreeNode root,int sum){
if(root == null) return 0;
return pathSumStartWithRoot(root,sum) + pathSum(root.left,sum) + pathSum(root.right,sum);
}

private int pathSumStartWithRoot(TreeNode root,int sum){
if(root == null) return 0;
int ret = 0;
if(root.val == sum) ret++;//当前结点的结果

ret += pathSumStartWithRoot(root.left,sum - root.val) + pathSumStartWithRoot(root.right,sum - root.val);//加上左右结点的结果

/* 其实写成下面这种写法更好理解:
ret += pathSumStartWithRoot(root.left,sum - root.val);
ret += pathSumStartWithRoot(root.right,sum - root.val);
原先写法不是看上去的左子树加右子树,而是更注释中的写法相同,是逐步算的结果。
*/

return ret;
}