统计路径和等于一个数的路径数量
- Path Sum III (Easy)
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10
/ \
5 -3
/ \ \
3 2 11
/ \ \
3 -2 1
Return 3. The paths that sum to 8 are:
1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11
路径不一定以 root 开头,也不一定以 leaf 结尾,但是必须连续。
public int pathSum(TreeNode root, int sum) {
if (root == null) return 0;
//累加,每次从根节点开始迭代,找到了就返回1,找到叶子结点还找不到,就返回0。下次从根节点的叶子结点找,依次递归遍历所有可能的组合。
int ret = pathSumStartWithRoot(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);
return ret;
}
private int pathSumStartWithRoot(TreeNode root, int sum) {
if (root == null) return 0;
//统计以当前节点开始的路径条数
int ret = 0;
//如果当前节点值等于目标和,+1
if (root.val == sum) ret++;
//往下寻找
ret += pathSumStartWithRoot(root.left, sum - root.val) + pathSumStartWithRoot(root.right, sum - root.val);
return ret;
}