Files
leetcode-go/笔试/微派 Test1/04-单选题2-后序遍历.md
T

2.9 KiB
Raw Blame History

tags, create time
tags create time
笔试
微派
树
遍历
数据结构
2026-05-16 14:50

04 - 单选题 2:二叉树后序遍历

题目

已知一棵二叉树的前序遍历为 [A, B, D, E, C, F],中序遍历为 [D, B, E, A, C, F]。则该树的后序遍历为:

选项 内容
A [D, E, B, F, C, A]
B [D, B, E, F, C, A]
C [E, D, B, F, C, A]
D [D, E, B, C, F, A]
点击查看答案与解析

✅ 正确答案:A


详细解析

解题思路

通过前序和中序遍历重建二叉树,然后手动推导后序遍历。

核心性质:

  • 前序: 根 → 左子树 → 右子树
  • 中序: 左子树 → 根 → 右子树
  • 后序: 左子树 → 右子树 → 根

逐步重建

第一步:确定整棵树的根

  • 前序第一个 = A → 根节点是 A
  • 在中序中找到 A:[D, B, E, | A, C, F]
    • 左子树(中序): [D, B, E]
    • 右子树(中序): [C, F]
        A
       / \
   [D,B,E] [C,F]

第二步:分解左子树

  • 前序中去掉根 A,剩余 [B, D, E, C, F]
  • 左子树长度 = 3,所以前序中左子树部分 = [B, D, E]
  • 左子树的前序第一个 = B → 左子树的根是 B
  • 在中序 [D, B, E] 中找到 B:
    • B 的左子树(中序): [D]
    • B 的右子树(中序): [E]
        A
       / \
      B    ?
     / \
    D   E

第三步:分解右子树

  • 前序中右子树部分 = [C, F]
  • 右子树的前序第一个 = C → 右子树的根是 C
  • 在中序 [C, F] 中找到 C:
    • C 的左子树: [](空)
    • C 的右子树: [F]
        A
       / \
      B    C
     / \     \
    D   E     F

第四步:写出后序遍历(左 → 右 → 根)

flowchart TD
    subgraph LR["后序遍历时序"]
        S1["① D (B的左)"] --> S2["② E (B的右)"]
        S2 --> S3["③ B (左子树根)"]
        S3 --> S4["④ F (C的右)"]
        S4 --> S5["⑤ C (右子树根)"]
        S5 --> S6["⑥ A (整树根)"]
    end

后序结果: [D, E, B, F, C, A]

快速验证

检查每个选项的后序特点:

  • 后序最后一个元素一定是根节点 A → 所有选项都满足 ✓
  • 对于 B 的子树,D 和 E 应该是 B 的子节点,在后续中应在 B 之前出现
  • D 和 E 无子关系(单节点),可以任意顺序出现在 B 前 → D, E 正确

面试延伸题

[!question] 如果只给后序+中序?能唯一确定二叉树吗?

可以! 原理类似:后序的最后一个元素是根,从中序划分左右子树,再递归处理。

只有前序+后序不能唯一确定二叉树(除非是满二叉树)。


[!tip] 记忆口诀

  • 前序找根(第一个就是根)
  • 中序分两边(根左边是左子树,右边是右子树)
  • 后序最后根(根在最后出现)