Path Sum II

路径和 二

描述:

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

  说明: 叶子节点是指没有子节点的节点。

解答:

  本题为上题的延伸,上一题只需找到一条满足条件的路径即可,本题需要找到所有满足条件的路径,并且还要将

路径上的节点保存下来,因此可以想到的算法为dfs,深度优先搜索根节点到每个叶节点的路径,判断路径上所有节点的

和是否满足条件。dfs算法的一般步骤如下:

int check(参数)
{
    if(满足条件)
        return 1;
    return 0;
}
 
void dfs(int step)
{
        判断边界
        {
            相应操作
        }
        尝试每一种可能
        {
               满足check条件
               标记
               继续下一步dfs(step+1)
               恢复初始状态(回溯的时候要用到)
        }
}   

  因此可以给出本题的代码如下:

class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        vector<int> temp;
        vector<vector<int>> res;
        dfs(root,temp,res,sum);
        return res;
    }
    void dfs(TreeNode* root,vector<int>& temp,vector<vector<int>>&res,int sum)
    {
        if(!root)
            return ;//判断边界条件
        temp.push_back(root->val);
        if(!root->left&&!root->right&&root->val==sum)
            res.push_back(temp);//是否满足条件
        dfs(root->left,temp,res,sum-root->val);//继续尝试其它的可能情况
        dfs(root->right,temp,res,sum-root->val);
        temp.pop_back();
    }
};

 

 

  

posted @ 2019-11-29 08:59  一只小菜鸡a  阅读(164)  评论(0)    收藏  举报