您的位置:首页 > 其它

【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
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: