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
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- 113. Path Sum II
- CSAPP Lab2
- 《剑指》5
- &&逻辑操作符的妙用
- codevs 4511 信息传递 NOIP2015 day1 T2
- linux从入门到精通笔记 第五章
- 113. Path Sum II
- Java Swing做的简易计算器
- HDU 2340 Obfuscation (DP--记忆话搜索)
- 解决Hibernate向MySQL数据库插入中文乱码问题
- android内存问题详解--重要
- hdu 5950(化解公式+矩阵快速幂)
- 文章标题 HDU 1217 : Arbitrage(最短路--Floyd+map)
- UVALive 3645 Objective: Berlin(最大流)
- 流形学习之等距特征映射(Isomap)