题目:
题解:
- 两重递归,第一个递归就是
递归每个节点从上到下的路径
,第二个递归就是计算该节点从上到下的路径个数
。
代码如下:
class Solution {
public:
int res=0;
int pathSum(TreeNode* root, int sum) {
if(!root)return 0;
int cnt=0;
helper(root,sum,cnt);
res+=cnt;
//分别从左右节点出发,计算路径和为sum的个数
pathSum(root->left,sum);
pathSum(root->right,sum);
return res;
}
void helper(TreeNode* root,int sum,int& cnt){
if(root->val==sum)cnt++;//由于sum可能为负数,所以此节点之后的路径和还可能等于sum,所以这里不能return
if(root->left)helper(root->left,sum-root->val,cnt);
if(root->right)helper(root->right,sum-root->val,cnt);
}
};