您的位置:首页 > 其它

leetcode 113. Path Sum II

2016-03-11 14:14 357 查看
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]
]


class Solution {
void do_once(int sum, vector<pair<TreeNode*, pair<int, vector<int>>>>&paths,
vector<vector<int>>&re)
{
vector<pair<TreeNode*, pair<int, vector<int>>>>newpaths;
for (int i = 0; i < paths.size(); i++)
{
if (paths[i].second.first == sum&&paths[i].first->left == NULL&&
paths[i].first->right == NULL)
re.push_back(paths[i].second.second);
else
{
if (paths[i].first->left != NULL)
{
if (paths[i].second.first + paths[i].first->left->val == sum&&
paths[i].first->left->left == NULL&&
paths[i].first->left->right == NULL)
{
vector<int>tt = paths[i].second.second;
tt.push_back(paths[i].first->left->val);
re.push_back(tt);
}
else
{
vector<int>tt = paths[i].second.second;
tt.push_back(paths[i].first->left->val);
newpaths.push_back(pair<TreeNode*, pair<int, vector<int>>>
(paths[i].first->left, pair<int, vector<int>>(
paths[i].second.first + paths[i].first->left->val,
tt)));
}
}
if (paths[i].first->right != NULL)
{
if (paths[i].second.first + paths[i].first->right->val == sum&&
paths[i].first->right->left == NULL
&&paths[i].first->right->right == NULL)
{

vector<int>tt = paths[i].second.second;
tt.push_back(paths[i].first->right->val);
re.push_back(tt);

}
else
{
vector<int>tt = paths[i].second.second;
tt.push_back(paths[i].first->right->val);
newpaths.push_back(pair<TreeNode*, pair<int, vector<int>>>
(paths[i].first->right, pair<int, vector<int>>(
paths[i].second.first + paths[i].first->right->val,
tt)));
}
}
}
}
paths = newpaths;
}
public:
vector<vector<int>> pathSum(TreeNode* root, int sum) {
vector<vector<int>>re;
if (root == NULL)
return re;
vector<pair<TreeNode*, pair<int, vector<int>>>>paths;
vector<int>aa;
aa.push_back(root->val);
paths.push_back(pair<TreeNode*, pair<int, vector<int>>>(root,
pair<int, vector<int>>(root->val, aa)));
while (!paths.empty())
{
do_once(sum, paths, re);
}
return re;
}
};


accepted
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: