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
return
accepted
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
相关文章推荐
- curl模拟post请求提交
- dwz 多选删除
- 微信第三方登录Android注意事项
- day1_android快捷键
- Java ReentrantLock和synchronize的对比
- ssl在tomcat 中的配置
- codeforces 651B Beautiful Paintings(贪心)
- 似然函数
- 学习python可以去看廖雪峰网站去看,写的很好
- android studio调试编译错误
- javascript统计输入文本的简易方法
- window.location.href的用法 (动态跳转)
- 网页向女友/老婆告白和纪念日专用特效
- Java命令行解析:apache commons-cli
- linux weblogic 控制台进入缓慢
- python的列表、元组、字典、集合
- Android必知必会-获取视频文件的截图、缩略图
- Android必知必会-获取视频文件的截图、缩略图
- Javascript进阶篇——(DOM—认识DOM、ByName、ByTagName)—笔记整理
- 欢迎使用CSDN-markdown编辑器