二叉树前序、中序和后序遍历的非递归实现
创作时间:
作者:
@小白创作中心
二叉树前序、中序和后序遍历的非递归实现
引用
1
来源
1.
http://www.cdweb.net/article/piiops.html
二叉树的遍历是数据结构中的一个重要概念,常见的遍历方式包括前序遍历、中序遍历和后序遍历。虽然递归实现是最直观的方式,但在某些场景下,非递归实现可能更为高效。本文将详细介绍二叉树前序、中序和后序遍历的非递归实现方法。
前序遍历(非递归实现)
前序遍历的顺序是根左右,当根节点不为空时,该节点才可以被打印。递归方法会自动保存现场信息,而非递归实现则需要使用栈来手动保存这些信息。
伪代码实现
void PreOrderTraverse(BinaryTree root)
{
BinaryTree cur = root;
stack s;
while(null != cur || !s.empty())
{
while(null != cur)
{
print cur.data;
s.push(cur);
cur = cur.left;
}
if(!s.empty()) {
cur = s.top();
s.pop();
cur = cur.right;
}
} //loop end!
}
实现原理
- 第3行的
cur相当于递归中的现场信息,而第4行声明的栈则用来保存它。 - 第5行的循环条件是结点不为空或者用户栈不空。
- 第7行到第12行的代码主要做的是,如果当前节点不为空,则打印,同时将该结点的信息保存到用户栈中,接着把当前节点改变成它的左子。当左子为空时,循环结束。
- 第13行到第16行的代码做的是取栈顶的现场信息(也就是最后一次保存的现场信息),然后改变当前结点为它的右子。
后序遍历(非递归实现)
后序遍历的顺序是左右根,我们要保证根节点在左孩子和右孩子访问之后才能访问。
实现条件
- P的左孩子和右孩子都为空,则该节点可以被直接访问;
- P有左孩子或右孩子,但左孩子和右孩子都已经被访问过,那么结点P也可以直接访问。
如果不是上面两种条件,那我们将P的右孩子和左孩子依次入栈,这样就可以保证每次取栈顶元素的时候,左孩子在右孩子的前面被访问,左孩子和右孩子都在根节点的前面被访问。
伪代码实现
void PostOrderTraverse(BinaryTree root)
{
if(null == root)
return;
stack s;
s.push(root);
BinaryTree pre = null;
BinaryTree cur;
while(!s.empty())
{
cur = s.top();
if((null == cur.lchild && null == cur.rchild)
|| (null != pre) && (pre == cur.lchild || pre == cur.rchild)) {
print cur.data;
s.pop();
pre = cur;
}
else {
if(null != cur.rchild) {
s.push(cur.rchild);
}
if(null != cur.lchild) {
s.push(cur.lchild);
}
}
} //loop end!
}
总结
通过上述分析,我们可以看到非递归遍历方法虽然在代码实现上相对复杂,但其效率通常高于递归方法。在实际开发中,可以根据具体需求选择合适的遍历方式。
热门推荐
《崩坏:星穹铁道》3.1新遗器适用角色推荐
慢性咽炎是怎么造成的?
重磅!国际学术话语权TOP高校,出炉!
专家支招:五种实用方法帮你告别打瞌睡
城市焕新,佛山在行动!
小程序代码多平台兼容检查的重要性与实用指南,助力开发者高效应对兼容性挑战
将希腊文化巧妙地结合于现实当中,创造出罗马时期的“黄金时代”
小班科学活动国宝金丝猴
保安的权利与义务:解析保安是否有权实施拘留行为
房间老是潮湿怎么办?打造健康舒适的家居环境
马栗种子提取物片有什么功效
心脏传导阻滞是怎么引起的
人这一辈子,一定要去一趟诏安!
强势股回调做二波有哪些策略?
2025年养老金调整方案六大方向前瞻:涨幅、挂钩调整等值得关注
八字身弱如何增强体质?全方位提升指南
大客户经理和销售区别
手掌虎口痒是什么原因
正式进入大重制时代!盘点10款已重制的经典游戏!
湖北宜都:用“大代理”模式,促进采购质效“大提升”
喜欢一个女孩,表白是一件慎重考虑精心准备的事情帮助你成功表白
灵芝石斛花旗参煲汤的功效
槟榔有提神的功效吗
放弃中国姓氏?华人遍布世界,为什么只有泰国华人完全同化
神经酸对大脑健康的四大关键作用
咖啡因4大功效与过量副作用解析:每日建议摄入量是多少?
普信集团清仓蔚来、理想,13F持仓前十机构仅剩6家同时持有蔚小理
个人申请破产的解决方法及股东责任解析
Excel身份证号重复项筛选方法详解
纪实摄影的拍摄技法全攻略