[二叉树][dfs]leetcode437:路径总和 Ⅲ (easy)

题目:
在这里插入图片描述
题解:

  • 两重递归,第一个递归就是递归每个节点从上到下的路径,第二个递归就是计算该节点从上到下的路径个数

代码如下:

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);
    }
};
发布了484 篇原创文章 · 获赞 149 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/103914008
今日推荐