【Leetcode长征系列】Path Sum II
2014-08-04 12:00
363 查看
原题:
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:
Given the below binary tree and
return
思路:利用递归得到所有的路径,再求和删除掉不等于目标和的路径。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > pathSum(TreeNode *root, int sum) {
vector<vector<int>> res,result;
res = hasPath(root);
for (int i = 0; i<res.size(); i++){
int ans = 0;
for (int j = 0; j<res[i].size(); j++)
ans += res[i][j];
if (ans == sum) result.push_back(res[i]);
}
return result;
}
vector<vector<int>> hasPath(TreeNode *root){
vector<vector<int>> res,left,right;
vector<int> path;
if(!root) return res;
else if (!root->left &&!root->right) {
path.push_back(root->val);
res.push_back(path);
}
else {
left = hasPath(root->left);
right = hasPath(root->right);
vector<int>::iterator it;
for(int i = 0; i<left.size(); i++){
it = left[i].begin();
left[i].insert(it,root->val);
}
for(int i = 0; i<right.size(); i++){
it = right[i].begin();
right[i].insert(it,root->val);
}
res.insert(res.end(),left.begin(),left.end());
res.insert(res.end(),right.begin(),right.end());
}
return res;
}
};需要注意的是,这道题对答案中的每一路径的顺序有要求,必须是从根到叶子的顺序的答案才能算正确。好几次不过都是因为这个原因。终于AC。
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:
Given the below binary tree and
sum = 22,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]
思路:利用递归得到所有的路径,再求和删除掉不等于目标和的路径。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int> > pathSum(TreeNode *root, int sum) {
vector<vector<int>> res,result;
res = hasPath(root);
for (int i = 0; i<res.size(); i++){
int ans = 0;
for (int j = 0; j<res[i].size(); j++)
ans += res[i][j];
if (ans == sum) result.push_back(res[i]);
}
return result;
}
vector<vector<int>> hasPath(TreeNode *root){
vector<vector<int>> res,left,right;
vector<int> path;
if(!root) return res;
else if (!root->left &&!root->right) {
path.push_back(root->val);
res.push_back(path);
}
else {
left = hasPath(root->left);
right = hasPath(root->right);
vector<int>::iterator it;
for(int i = 0; i<left.size(); i++){
it = left[i].begin();
left[i].insert(it,root->val);
}
for(int i = 0; i<right.size(); i++){
it = right[i].begin();
right[i].insert(it,root->val);
}
res.insert(res.end(),left.begin(),left.end());
res.insert(res.end(),right.begin(),right.end());
}
return res;
}
};需要注意的是,这道题对答案中的每一路径的顺序有要求,必须是从根到叶子的顺序的答案才能算正确。好几次不过都是因为这个原因。终于AC。
相关文章推荐
- 二叉树系列---path-sum-II
- 【Leetcode长征系列】Minimum Path Sum
- [leetcode刷题系列]Path Sum II
- 算法系列——Path Sum II
- [LeetCode]112. Path Sum&113. Path Sum II
- leetcode——Path Sum II
- Path Sum II leetcode java
- [lintcode] Binary Tree Maximum Path Sum II
- 113-Path Sum II
- LeetCode113 Path Sum II
- Leetcode 113. Path Sum II
- Leetcode Path Sum II
- [LeetCode]113.Path Sum II
- LeetCode Path Sum II
- LeetCode: Path Sum II
- 113. Path Sum II
- LeetCode--path sum ii
- [Leetcode]Path Sum II
- 【LeetCode】Path Sum II
- LeetCode--Path Sum II