给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
10 / \ 5 -3 / \ \ 3 2 11 / \ \ 3 -2 1
返回 3。和等于 8 的路径有:
1. 5 -> 3 2. 5 -> 2 -> 1 3. -3 -> 11
|
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
本题网上讲了很多思路,有双递归和前缀和等等,我们这里还是延续该系列题型的思路,使用深度优先搜索遍历。由于路径开始的结点不一定是根结点,所以我们要递归的遍历以每个结点为根结点的情况下,是否有满足条件的路径,同时我们需要在每次递归当中设置一个新变量,该变量用来计算从当前结点出发满足条件的路径。
具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
class Solution { public int pathSum(TreeNode root, int sum) { if (root == null) return 0;
return dfs(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum); }
private int dfs(TreeNode root, int sum) { if (root == null) return 0;
sum -= root.val;
int result = sum == 0 ? 1 : 0; return result + dfs(root.left, sum) + dfs(root.right, sum); } }
|