JZ84 二叉树中和为某一值的路径(三)

image
image
image
image

思路:
既然要找到所有路径上节点和等于目标值的路径个数,就肯定要先找到这样的路径起点。
但是我们不知道起点在哪,而且任意节点都有可能是起点。
以前序遍历二叉树的所有节点,每个节点都可以作为一次起点,即子树的根节点。


class Solution {
public:

    //先序遍历找路径
    void PreOrder(TreeNode* root, int sum)
    {
        if(root == NULL)
            return;
        //符合目标值
        if(sum == root->val)
            res++;  //路径个数+1
        //进入字节的继续寻找
        PreOrder(root->left, sum-root->val);
        PreOrder(root->right, sum-root->val);
    }
    int res = 0; //用来存路径的个数
    int FindPath(TreeNode* root, int sum) {
        // write code here
        //求该树有多少条路径的节点值之和等于sum值
        
        //树为空则返回
        if(root == NULL)
            return res;
        
        //查询某个节点为根的路径个数
        PreOrder(root, sum);

        //找到其子节点为根的路径
        FindPath(root->left, sum);
        FindPath(root->right, sum);
        
        return res;
    }

};
posted @ 2024-04-22 21:17  蓝色的海嗷  阅读(120)  评论(0)    收藏  举报