二叉树前序、中序和后序遍历的非递归实现
创作时间:
作者:
@小白创作中心
二叉树前序、中序和后序遍历的非递归实现
引用
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大设计失误
游泳爱好者陆上力量训练
一种波浪形装配式生态堤岸
500架无人机打造"义务植树星空秀"
速冻饺子出厂检验项目有哪些?速冻饺子出厂检验费用
这还拿不下你?吉林3日游攻略轻松拿捏
新茶是什么意思,是指新鲜茶叶
AIGC检测:深入解析人工智能生成内容识别技术
如何根据头疼类型选择合适的缓解方法?
“春捂秋冻”重点是捂哪里,捂到什么时候?专家告诉你
如何把握黄金市场的行情变化?这些变化如何反映市场需求?
回南天必备:姜米茶、红豆薏米茶等实用的祛湿茶饮推荐
空调匹数与面积匹配指南,选购空调不再迷茫
“好客山东”春游纳客2387万人次
空气能技术:原理、应用与未来展望
轻松小游戏:愉悦心情、缓解压力,生活欢笑不止的优选方式
所罗门王72柱魔神:神秘力量的象征与传说
银发无忧 残健共融——黄河银行构筑无障碍金融服务新生态
上市银行绿色金融大扫描!
厚德的八种内涵
新能源汽车火灾扑救:挑战与对策深度解析
电缆选型核心要素与原则是什么?
苏州三日游攻略:行程规划与预算详解
如何设置DNS提升上网速度与安全性:详细操作指南
拿铁奶泡怎么打 意式浓缩牛奶拿铁咖啡拉花奶泡打发技巧教学
射频磁控溅射镀膜仪的选型要点
冠状动脉粥样硬化性心脏病治疗要点
推挽式B类功率放大器的基本原理