给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

注意:叶子节点 是指没有子节点的节点。

 本体采用递归回溯算法来实现。

class Solution {
public:
    vector<vector<int>> res;//全局变量res 用来存放结果数组 是二维的
    vector<int> temp;//全局变量temp 用来存放当前的路径
    vector<vector<int>> pathSum(TreeNode* root, int target) {
        recur(root,target);//递归
        return res;
    }
    void recur(TreeNode* root,int target)
    {
        if(root==NULL)//如果节点为空,可能是这个二叉树是空的,也可能是已经遍历完了叶子节点,所以直接返回 无返回值
        {
            return;
        }
        temp.push_back(root->val);//将根节点的值存放到temp数组中
        target-=root->val;//从target中减去当前的值
        //当target的值已经减到0并且root到达叶子节点
        //说明这个路径符合题目要求
        //路径之和等于target
        if(target==0&&root->left==nullptr&&root->right==nullptr)
        {
            res.push_back(temp);//将这个数组,存放到结果数组中
        }
        recur(root->left,target);//继续递归左子节点
        recur(root->right,target);//继续递归右子节点
        temp.pop_back();//回溯,要将当前这个节点从temp数组中删掉
        //target+=root->val;//target值不用还原是因为target是值传递,当前层的不影响下一层的结果
    }
};

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐