二叉树前序、中序和后序遍历的非递归实现
创作时间:
作者:
@小白创作中心
二叉树前序、中序和后序遍历的非递归实现
引用
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!
}
总结
通过上述分析,我们可以看到非递归遍历方法虽然在代码实现上相对复杂,但其效率通常高于递归方法。在实际开发中,可以根据具体需求选择合适的遍历方式。
热门推荐
怎么过一个有趣的生日:20+个创意点子,让你告别无聊生日派对!
电动自行车如何预约上牌?上牌需要哪些材料?问答来了
央视再聚焦!无锡科技园区如何打造“创新高地”
央视点赞!“太湖之星”助力无锡环保蝶变
央视春晚带火!无锡雪浪山与拈花湾成新晋打卡圣地
解密无锡:央视春晚分会场背后的实力密码
央视聚焦:无锡历史文化魅力何在?
标普500指数飙升,企业盈利成关键
高盛力挺!中国股市上涨原因揭秘
解密股市大涨:三大驱动力与投资策略全解析
2024短剧演员片酬调查:头部演员片酬几何?
六味地黄丸:中医经典方剂如何改善夜间口干?
糖尿病患者如何预防夜间口干?
精神压力大?小心夜半口干!
节日期间禁渔巡查不打烊,助力环保与生态平衡
长江禁渔通告对当地经济和生态环境的影响分析
《熊出没》:普通人天然也会有一点英雄主义|影评
小苏打使用不当会引发健康危机!
小苏打:一种常见的环保材料
小苏打:厨房里的万能神器
中国新能源汽车的国际竞争优势来自哪里?
中国汽车出口600万辆:打了谁的脸,伤了谁的心
“哈迷”狂喜!淮海中路地铁站惊现“9 ¾ 站台”:现实与魔法的奇妙交融
动森玩家心理大揭秘:佛系玩法的秘密
第五人格佛系玩法:躺赢也能嗨!
《流浪地球3》如何利用神经AI数字人技术?
原来这些兰花都可以吃
小分子肽如何改变新药研发?
酶解法新突破:生物活性肽生产更高效
用英语描述艺术品:从词汇到对话的全方位指南