思路:
定义一个getSum函数,求包括根节点的和为指定值的路径的个数。对于求总的和为指定值的路径的个数,先求包括根节点的和为指定值的路径的个数,再求左子树的包括左子树根节点的和为指定值的路径的个数,再求右子树的包括右子树根节点的和为指定值的路径的个数,三者的和即为所求。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int pathSum(TreeNode root, int sum) {
if (root == null)
return 0;
return getSum(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);
}
public int getSum(TreeNode root, int sum) {
if (root == null)
return 0;
int result = 0;
if (root.val == sum)
result++;
result += getSum(root.left, sum - root.val) + getSum(root.right, sum - root.val);
return result;
}
}
Runtime:33ms