一起走进遍历二叉树的奇妙之旅:递归、迭代与统一迭代法全详解
创作时间:
作者:
@小白创作中心
一起走进遍历二叉树的奇妙之旅:递归、迭代与统一迭代法全详解
引用
CSDN
1.
https://blog.csdn.net/2301_79896470/article/details/146053622
生活的底片从来不是遥远的白日梦,而是热爱生活的自己
二叉树的遍历是指按照某种顺序访问树中的所有节点。常见的遍历方式分为两大类:深度优先遍历(DFS) 和 广度优先遍历(BFS)。以下是详细的遍历方式及其实现方法:
深度优先遍历(DFS)
深度优先遍历是从根节点出发,沿着一条路径尽可能深地访问节点,直到到达叶子节点,然后回溯到上一个节点继续遍历。DFS 有三种常见方式:
前序遍历(Preorder Traversal)
- 顺序:根节点 → 左子树 → 右子树
- 应用场景:复制树、表达式树的前缀表示。
中序遍历(Inorder Traversal)
- 顺序:左子树 → 根节点 → 右子树
- 应用场景:二叉搜索树的中序遍历结果是有序的。
后序遍历(Postorder Traversal)
- 顺序:左子树 → 右子树 → 根节点
- 应用场景:删除树、表达式树的后缀表示。
广度优先遍历(BFS)
广度优先遍历是按层次从上到下、从左到右访问节点。通常使用队列实现。
层序遍历(Level Order Traversal)
- 顺序:从上到下、从左到右逐层访问节点。
- 应用场景:求树的深度、按层打印节点。
遍历方式对比
遍历方式 | 顺序 | 应用场景 | 实现方式 |
---|---|---|---|
前序遍历 | 根 → 左 → 右 | 复制树、前缀表达式 | 递归、栈 |
中序遍历 | 左 → 根 → 右 | 二叉搜索树的有序输出 | 递归、栈 |
后序遍历 | 左 → 右 → 根 | 删除树、后缀表达式 | 递归、栈 |
层序遍历 | 从上到下、从左到右 | 求树的深度、按层打印节点 | 队列 |
二叉树的递归遍历
在递归遍历中,各个遍历的规律是:
- 前序遍历:中左右
- 中序遍历:左中右
- 后序遍历:左右中
二叉树的迭代遍历
迭代法就是借用栈的思想来实现二叉树的遍历,但是不同的遍历有不一样。
前序遍历
因为我们要满足出栈是是中左右的顺序,根据栈先进后出的特性,我们入栈的顺序应该是右左。
中序遍历
中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点。
后序遍历
后序遍历是左右中,我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了。
二叉树的统一迭代法
针对三种遍历方式,使用迭代法是可以写出统一风格的代码!我们的做法是,我们讲访问的节点直接加入栈中,但是如果是要处理的节点我们就在后面放入一个空指针。然后统一收割节点。
前序遍历
压栈顺序:右左中
中序遍历
压栈顺序:右中左
后序遍历
压栈顺序:中右左
热门推荐
怎样教狗不在家里乱尿
肺康复与环境因素:创造一个有利于康复的生活环境
台式电脑怎么连接手机个人热点上网 赶紧来学
让知识黏性倍增的6种比喻话术:抽象概念秒懂
COB是什么意思,与SMD对比分析
多类别支持向量机(Multi-class SVM)
TF卡读不出来问题解决指南:排查步骤与解决方案
鱼池有鱼能放高锰酸钾吗,可以但需控制用量
入户门上安装摄像头,侵权吗?
博物馆数字化展陈升级!以科技激活古都文脉,重塑历史对话
2025年考研人数暴跌、考公人数却创历史新高, 背后原因分析!
文玩市场低迷,后市逆袭可期?
如何精准判断市场的行情走向?这种行情走向如何指导投资操作?
广西“防贫保”实现监测、预警、理赔及咨询“一站式”服务
牙龈肿胀要警惕四种病
昆明注册公司所需材料及流程简化
会议背景:概念、要素与实践指南
西梅热量:低热量水果的营养与食用指南
C语言单链表数据输入详解:从节点创建到链表遍历
基于BP网络识别26个英文字母的Matlab实现
外企的KT机会是什么意思
掌握体积计算:不同形状物体的体积公式详解
虚拟机如何IP代理
“馄饨”不读hún dùn,99%的人都读错了!
手掌受伤导致大拇指张不开和麻木应如何处理
新史料、新方法、新视野:现代化视域中的长江沿岸城市研究
如何做好家装预算员?怎样提高预算的准确性?
装修预算清单:从清包到全包,详细费用一览
什么是自动启停
如何带领团队低谷崛起