剑指offer 25 二叉树中和为某一值的路径
非递归方法:
class Solution {
public:
vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
vector<vector<int>> result;
if(!root)
return result;
stack<TreeNode *> s;
s.push(root);
TreeNode *cur=root;
TreeNode *last=NULL;
vector<int> curpath;
int sum=;
while(!s.empty())
{
if(cur==NULL)
{
if((s.top())->right&&(s.top())->right!=last)
{
cur=(s.top())->right;
}
else
{
last=s.top();
s.pop();
sum-=last->val;
curpath.pop_back();
}
}
else
{
s.push(cur);
curpath.push_back(cur->val);
sum+=cur->val;
if(!cur->left&&!cur->right&&sum==expectNumber)
{
result.push_back(curpath);
}
cur=cur->left;
}
}
return result;
}
};
要注意转向右子树时的情况!!
对容器vector,push_back()是从容器末尾插入元素,pop_back()是从容器末尾删除元素。stack没有迭代器,只能插入和得到栈顶元素。
递归方法如下:
class Solution {
public:
vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {
vector<vector<int>> result;
if(!root)
return result;
int cursum=;
vector<int> path;
FindPath(root,expectNumber, result, path, cursum);
return result;
}
void FindPath(TreeNode* root, int expectNumber, vector<vector<int>> &result, vector<int> &path, int cursum)
{
cursum+=root->val;
path.push_back(root->val);
if(!root->left&&!root->right&&cursum==expectNumber)
{
result.push_back(path);
}
if(root->left!=NULL)
FindPath(root->left,expectNumber, result, path, cursum);
if(root->right!=NULL)
FindPath(root->right,expectNumber, result, path, cursum);
path.pop_back();
}
};
剑指offer 25 二叉树中和为某一值的路径的更多相关文章
- 剑指Offer:二叉树中和为某一值的路径【34】
剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...
- 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径
剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...
- 剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...
- 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)
[剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...
- 【剑指offer】二叉树中和为某一值的路径
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26141815 题目描写叙述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数 ...
- 【Java】 剑指offer(34) 二叉树中和为某一值的路径
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有 ...
- Go语言实现:【剑指offer】二叉树中和为某一值的路径
该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路 ...
- 《剑指offer》二叉树中和为某一值的路径
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 【剑指offer】二叉树中和为某一值的路径,C++实现
原创文章,转载请注明出处! 博客文章索引地址 1.题目 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径由结点和有向边组成,从根结点到叶节点. // 二叉树结点的定义 st ...
随机推荐
- html5介绍
html5与html4的区别 (h5 and h4) 什么是OPOA 1, 浏览器对h5的支持情况 2, 历史 --- h5 2004年,whatwg 提出 w ...
- docker 保存更改的镜像:
<pre name="code" class="ruby">保存更改的镜像: docker:/root# docker commit -m &quo ...
- Android GUI Building Blocks
说明:此笔记为“Android开发”学习视频的笔记,链接如下:http://open.163.com/movie/2010/1/8/D/M79HE97C3_M79HEQJ8D.html 一, Acti ...
- C# base和this[转]
new关键字引起了大家的不少关注,尤其感谢Anders Liu的补充,让我感觉博客园赋予的交流平台真的无所不在.所以,我们就有必要继续这个话题,把我认为最值得关注的关键字开展下去,本文的重点是访问关键 ...
- Ubuntu安装二:在VM中安装Ubuntu
在VM中安装Ubuntu,先的安装VM,VM的安装请见:http://blog.csdn.net/u011043843/article/details/35291799 1.打开VM,新建虚拟机 2. ...
- 【转】HtmlAgilityPack 之 HtmlNode类
[转]HtmlAgilityPack 之 HtmlNode类 HtmlAgilityPack中的HtmlNode类与XmlNode类差不多,提供的功能也大同小异.下面来看看该类提供功能. 一.静态属性 ...
- memcached在注册表的位置
HKEY_LOCAL_MACHINE-System-ControlSet001-services-Memcached Server
- EBS R12 修改 apps 密码[Z]
注意:修改密码时应保证所有用户已退出, 最好是关闭应用实例.不用关闭数据库.在修改密码之前一定要改备下数据库中的FND_ORACLE_USERID和FND_USER表.FNDCPASS工具会自动把AP ...
- JavaSE复习日记 : 循环终止语句(break/break outerFor/continue)
最近没网,但攒了几天的博客,这次逮到机会发博客,直接三篇走起; /* * 循环终止语句: break/ break outerFor/ continue */ /* * break语句 * 1. 用于 ...
- EC读书笔记系列之17:条款41、42、43、44、45、46
条款41 了解隐式接口与编译器多态 记住: ★classes和templates都支持接口和多态 ★对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtual函 ...