给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
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
思路分析
在整个树结构中,求路径和,根据递归的思路来看,这个是存在两个子问题的。
首先定义某个节点为node,路径和为k
第一个子问题:以node节点的左右节点为根节点的路径和为K的个数
第二个子问题:以某个节点为根节点,剩下两个节点和为k-node.val的值的个数。
两个子问题的终止条件都是:节点为null的时候,返回0
代码如下:
public int pathSum(TreeNode root,int sum){
if (root==null){
return 0;
}
return count(root,sum)+pathSum(root.left,sum)+pathSum(root.right,sum);
}
public int count(TreeNode root,int sum){
if (root==null){
return 0;
}
int curr= root.val==sum?1:0;
return curr+count(root.left,sum-root.val)+count(root.right,sum-root.val);
}