437. Path Sum III (Easy)

153 阅读1分钟

 统计路径和等于一个数的路径数量

  1. Path Sum III (Easy)

Leetcode / 力扣

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;
}