两次递归
-以根节点为起点的路径之和+不以根节点为起点的路径之和
-以当前节点为起点的路径之和+以两个子节点为起点的路径之和
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//helper
int paths(TreeNode node,int sum){
int res=0;
if(node==null){
return 0;
}
else if(node.val==sum){
res=res+1;//子节点总和为0的路径也算
}
return res+paths(node.left,sum-node.val)+paths(node.right,sum-node.val);
}
public int pathSum(TreeNode root, int sum) {
if(root==null){
return 0;
}
return paths(root,sum)+pathSum(root.left,sum)+pathSum(root.right,sum);
}
}