文章目录
🌲 前序、中序、后序遍历的“爱恨情仇”:何时相等?何时相反?🤔
哈喽,各位热爱数据结构的小伙伴们!👋
在驰骋于代码的世界时,二叉树是我们绕不开的一个重要伙伴。而谈到二叉树,前序、中序、后序这三种遍历方式更是基础中的基础。它们就像探索树的三种不同地图,每一种都有其独特的风景。
但是,你有没有想过一个有趣的问题:
在什么样“奇特”的树结构下,这三种遍历方式的结果会变得一样,或者干脆完全反过来呢?
今天,就让我们用最通俗易懂的方式,把这个问题的里里外外扒个干净!准备好了吗?Let’s Go! 🚀
结论速查表 🚀 (TL;DR)
赶时间的小伙伴可以直接看这张表,一图胜千言!
| 条件 | 成立的树结构 🌲 |
|---|---|
| 前序 == 中序 == 后序 | 空树 或 只有一个根节点的树 👶 |
| 前序 == 中序 | 整棵树没有左子树 (纯“右斜树”) ➡️ |
| 中序 == 后序 | 整棵树没有右子树 (纯“左斜树”) ⬅️ |
| 前序 == 后序 | 空树 或 只有一个根节点的树 👶 |
| 前序 与 中序 相反 | 整棵树没有右子树 (“左斜树”) ⬅️ |
| 中序 与 后序 相反 | 整棵树没有左子树 (“右斜树”) ➡️ |
| 前序 与 后序 相反 | 每个节点最多只有一个孩子 (退化成“链表”啦) ⛓️ |
如果你对这些结论背后的原因感到好奇,那么请继续往下看,我们来逐一破解!👇
🧐 第一部分:遍历结果何时“心意相通”?(相等篇)
首先,我们来定义一下三种遍历的核心:
- 前序 (根 → 左 → 右): 老大先上!我先来,然后是我的左膀,最后是右臂。
- 中序 (左 → 根 → 右): 我在中间!先让左膀上,然后我上,最后右臂。
- 后序 (左 → 右 → 根): 我垫后!先让左膀右臂都上,我最后压轴。
1. 三兄弟完全一条心 (前序 == 中序 == 后序) 🤝
答案:当树是空的,或者树只有一个孤零零的根节点时。
这非常直观。
- 如果树是空的,那大家就都空空如也,结果自然相等。
- 如果树只有一个节点
A,不管你怎么遍历,结果都是[A]。老大是我,小弟也是我,我就是所有!
A
- ✅ 前序:
[A] - ✅ 中序:
[A] - ✅ 后序:
[A]
只要再多一个节点,根节点的位置就会在前序(首位)、中序(中间)、后序(末位)中发生变化,它们就不可能完全相等了。
2. 前序与中序“肩并肩” (前序 == 中序) 👬
答案:当整棵树“向右看齐”,所有节点都没有左孩子时。
我们再看口诀:
- 前序: 根 → 左 → 右
- 中序: 左 → 根 → 右
想要它俩相等,就必须消除它们之间的差异项——左子树!只要每个节点都没有左孩子,遍历顺序就都简化成了 根 → 右。
- 示例 (右斜树):
A \ B \ C - 🚶♂️ 前序遍历 (根 → 右): A → B → C
- 🚶♂️ 中序遍历 (根 → 右): A → B → C
- 🎉 瞧,它俩一模一样!
3. 中序与后序“手牵手” (中序 == 后序) 👭
答案:当整棵树“向左看齐”,所有节点都没有右孩子时。
同样的道理,我们看口诀:
- 中序: 左 → 根 → 右
- 后序: 左 → 右 → 根
想要它俩相等,就必须消除差异项——右子树!只要每个节点都没有右孩子,遍历顺序就都简化成了 左 → 根。
- 示例 (左斜树):
A / B / C - 🚶♀️ 中序遍历 (左 → 根): C → B → A
- 🚶♀️ 后序遍历 (左 → 根): C → B → A
- 🎉 完美!又是一对双胞胎!
🔄 第二部分:遍历结果何时“背道而驰”?(相反篇)
“相反”指的是序列完全逆序,比如 [1, 2, 3] 和 [3, 2, 1]。
1. 前序与后序“互相嫌弃” (前序 vs 后序) 😒
答案:当树退化成一条链时(每个节点最多只有一个孩子)。
这种情况最有趣!
- 前序是 从上到下 把链上的节点过一遍。
- 后序是先冲到链的 最末端,再 从下到上 往回走。
这不就是妥妥的“你走正序,我走逆序”嘛!
- 示例 (随便一条链):
A \ B / C - ⬆️ 前序 (从上到下):
[A, B, C] - ⬇️ 后序 (从下到上):
[C, B, A] - 🤯 它俩就是天生的“反骨”!
2. 前序与中序“唱反调” (前序 vs 中序) 🗣️
答案:当整棵树是“左斜树”时(所有节点都没有右孩子)。
我们刚才在“相等篇”已经见过左斜树了。
-
在这种树里,前序是 根 → 左,天然地 从上到下 访问。
-
而中序是 左 → 根,必须先冲到最深的左孩子,再 从下到上 访问。
-
示例 (左斜树):
A / B / C -
⬆️ 前序:
[A, B, C] -
⬇️ 中序:
[C, B, A] -
😲 是的,它们在这种情况下是完全相反的!
3. 中序与后序“南辕北辙” (中序 vs 后序) 🧭
答案:当整棵树是“右斜树”时(所有节点都没有左孩子)。
和上面的情况完全镜像!
-
在右斜树里,中序是 根 → 右,自然地 从上到下 访问。
-
而后序是 右 → 根,必须先冲到最深的右孩子,再 从下到上 访问。
-
示例 (右斜树):
A \ B \ C -
⬆️ 中序:
[A, B, C] -
⬇️ 后序:
[C, B, A] -
😜 它俩也成了欢喜冤家!
总结 ✨
哇哦!通过今天的探索,我们发现二叉树的遍历远不止死记硬背那么简单。树的 结构 直接决定了遍历的结果和它们之间的关系。
- 极简结构 (空或单点): 带来绝对的和谐统一。
- “偏科”结构 (纯左或纯右): 导致了部分遍历结果的相等或完全相反。
- “链式”结构 (退化): 使得前序和后序这对“冤家”的顺序完全颠倒。
希望这篇图文并茂(表情包并茂)的博客能帮助你彻底理解这个知识点!下次面试或学习中再遇到类似问题,你就能自信满满地给出答案啦!
觉得有帮助的话,别忘了点赞和分享哦!❤️ 我们下次再见!👋
二叉树三种遍历结果何时相等或相反

被折叠的 条评论
为什么被折叠?



