前序、中序、后序遍历的“爱恨情仇”:何时相等?何时相反?

二叉树三种遍历结果何时相等或相反

🌲 前序、中序、后序遍历的“爱恨情仇”:何时相等?何时相反?🤔

哈喽,各位热爱数据结构的小伙伴们!👋

在驰骋于代码的世界时,二叉树是我们绕不开的一个重要伙伴。而谈到二叉树,前序、中序、后序这三种遍历方式更是基础中的基础。它们就像探索树的三种不同地图,每一种都有其独特的风景。

但是,你有没有想过一个有趣的问题:

在什么样“奇特”的树结构下,这三种遍历方式的结果会变得一样,或者干脆完全反过来呢?

今天,就让我们用最通俗易懂的方式,把这个问题的里里外外扒个干净!准备好了吗?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]

  • 😜 它俩也成了欢喜冤家!

总结 ✨

哇哦!通过今天的探索,我们发现二叉树的遍历远不止死记硬背那么简单。树的 结构 直接决定了遍历的结果和它们之间的关系。

  • 极简结构 (空或单点): 带来绝对的和谐统一。
  • “偏科”结构 (纯左或纯右): 导致了部分遍历结果的相等或完全相反。
  • “链式”结构 (退化): 使得前序和后序这对“冤家”的顺序完全颠倒。

希望这篇图文并茂(表情包并茂)的博客能帮助你彻底理解这个知识点!下次面试或学习中再遇到类似问题,你就能自信满满地给出答案啦!

觉得有帮助的话,别忘了点赞和分享哦!❤️ 我们下次再见!👋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会有风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值