113. Path Sum II

来源:互联网 发布:建筑设计优化职责 编辑:程序博客网 时间:2024/06/10 17:04

这里写图片描述

这道题用到了DFS和回溯的思想
第一种方案:

class Solution {public:    vector<vector<int> > pathSum(TreeNode* root, int sum)     {        vector<int>temp;        vector<vector<int> >ret;        dfs(root,sum,temp,ret);        return ret;    }    void dfs(TreeNode *root,int sum,vector<int>temp,vector<vector<int> >&ret)    {        if(!root)        {            return;        }        temp.push_back(root->val);        if(root->left==NULL&&root->right==NULL&&sum==root->val)        {            ret.push_back(temp);        }        if(root->left)            dfs(root->left,sum-root->val,temp,ret);        if(root->right)            dfs(root->right,sum-root->val,temp,ret);    }};

第二种方案:

class Solution {public:    vector<vector<int> > pathSum(TreeNode* root, int sum)     {        vector<int>temp;        vector<vector<int> >ret;        dfs(root,sum,temp,ret);        return ret;    }    void dfs(TreeNode *root,int sum,vector<int>temp,vector<vector<int> >&ret)    {        if(!root)        {            return;        }        else        {            temp.push_back(root->val);            if(root->left==NULL&&root->right==NULL&&root->val==sum)                ret.push_back(temp);            dfs(root->left,sum-root->val,temp,ret);            dfs(root->right,sum-root->val,temp,ret);            temp.pop_back();        }    }};

第三种方案:

class Solution {public:    void pathSumHelper(TreeNode* root, int sum, vector<vector<int>>& result, vector<int>& curPath)    {        if(root->left == nullptr && root->right == nullptr)        {            if(sum == root->val)            {                curPath.push_back(root->val);                result.push_back(curPath);                curPath.pop_back();            }            else                return;        }        else        {            if(root->left != nullptr)            {                curPath.push_back(root->val);                pathSumHelper(root->left, sum - root->val, result, curPath);                curPath.pop_back();            }            if(root->right != nullptr)            {                curPath.push_back(root->val);                pathSumHelper(root->right, sum - root->val, result, curPath);                curPath.pop_back();            }        }    }    vector<vector<int>> pathSum(TreeNode* root, int sum)     {        vector<vector<int>> result;        if(root == nullptr)        {            return result;        }        vector<int> curPath;        pathSumHelper(root, sum, result, curPath);        return result;    }};
class Solution {public:    vector<vector<int> > pathSum(TreeNode* root, int sum)     {        vector<int>temp;        vector<vector<int> >ret;        dfs(root,sum,temp,ret);        return ret;    }    void dfs(TreeNode *root,int sum,vector<int>&temp,vector<vector<int> >&ret)    {        if(!root)            return;        if(NULL==root->left&&NULL==root->right&&sum==root->val)        {           temp.push_back(root->val);           ret.push_back(temp);           temp.pop_back();        }        temp.push_back(root->val);        dfs(root->left,sum-root->val,temp,ret);        dfs(root->right,sum-root->val,temp,ret);        temp.pop_back();    }};
0 0
原创粉丝点击