二叉树前序、中序和后序遍历的非递归实现
创作时间:
作者:
@小白创作中心
二叉树前序、中序和后序遍历的非递归实现
引用
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!
}
总结
通过上述分析,我们可以看到非递归遍历方法虽然在代码实现上相对复杂,但其效率通常高于递归方法。在实际开发中,可以根据具体需求选择合适的遍历方式。
热门推荐
单位社保欠费补缴流程和注意事项有哪些
合肥警备区探索文职人员专业能力培训路子
狗狗可以吃蓝莓吗?探究蓝莓对狗狗的适宜性
乔安山:失手“撞死”雷锋,做好事三十年,感人事迹后被拍成电影
“五队争二”变“三队抢四”,留给国足容错率已越来越低
【健康科普】空腹采血全知道
芋头饭、山药饭:7大低糖米饭配方,助糖尿病人吃好主食血糖无忧
别再妖魔化米面!碳水不是糖尿病的敌人!
“食安封签”来了 湖南人的外卖包装将有这些新改变
玉米的淀粉能干什么?玉米淀粉的用途有哪些?
三国降将数不胜数,为何只有于禁投降饱受非议?原因其实很简单
“天府之国”:从关中到四川的历史变迁
转院手续办理流程及医保报销指南
床边留40厘米过道够用吗
不做“小胖墩”系列之身体活动要积极
茶叶种类大全及功效与作用(茶叶给您总结全了!)
十类好卖的生鲜食品推荐 畅销的生鲜食品有哪些
10座中国版的“教堂之城”,风情不输欧洲
刑事案件律师多久可以会见
从无人机到制导导弹,揭秘以色列在贝卡谷地空战的创新战法
谷丙转氨酶与谷草转氨酶偏高是否代表肝功能异常
我国住房发展已进入新阶段,政府如何平衡市场与保障?
如何查找数据库中的ID
提升患者体验 | 医院应如何运用候补挂号机制提高号源利用率?
初识上位机(下):C#读写PLC数据块数据
高中生学习秘诀:如何运用技巧实现成绩飞跃?
显卡参数 gt 和 gtx 的全方位解析:从性能到适用范围
年末将至,这些交通安全知识请牢记!
绵阳北川加快建设全国禹羌文化全域旅游目的地
芹菜怎么腌制好吃简单的做法