You are given a binary tree in which each node contains an integer value.
Find the number of paths that sum to a given value.
The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).
The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.
Example:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / 5 -3 / \ 3 2 11 / \ 3 -2 1 Return 3. The paths that sum to 8 are: 1. 5 -> 3 2. 5 -> 2 -> 1 3. -3 -> 11
计算有多少条路径上的节点值的和为sum
rootSum是计算从根节点往下,有没有符合条件的子路径
C++(19ms):
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 int pathSum(TreeNode* root, int sum) { 13 if (root == NULL) return 0 ; 14 return rootSum(root,sum) + pathSum(root->left,sum) + pathSum(root->right,sum) ; 15 } 16 17 int rootSum(TreeNode* root, int sum) { 18 if (root == NULL) return 0 ; 19 return (root->val == sum ? 1 : 0) + rootSum(root->left,sum - root->val) + rootSum(root->right,sum - root->val) ; 20 } 21 };