题目:
给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。
1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点
2.总节点数目为n
3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)
示例:
二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求
思路:
比第一题的路径和少点条件,很好写。
复杂度:
时间复杂度:遍历O(n)
空间复杂度:递归最差是O(n),一般为树高
代码:
int res = 0;
public int FindPath (TreeNode root, int sum) {
// write code here
if(root==null) return 0;
recur(root,sum);
FindPath(root.left,sum);
FindPath(root.right,sum);
return res;
}
private void recur(TreeNode root, int sum){
if(root == null) return;
if(sum == root.val) res++;
sum-=root.val;
recur(root.left,sum);
recur(root.right,sum);
}