一、核心结论
1.先序 + 中序 → 唯一确定一棵二叉树 ✔
2.后序 + 中序 → 唯一确定一棵二叉树 ✔
3.先序 + 后序 → 不能唯一确定二叉树 ❌
- 单独一种遍历序列:无法还原二叉树
二、三种遍历顺序回顾
-
先序:根 左 右
-
中序:左 根 右
-
后序:左 右 根
一、已知 先序 + 中序 → 构造二叉树
步骤口诀
-
先序第一个元素 = 整棵树根
-
去中序里找根 → 划分左子树序列、右子树序列
-
先序去掉根,按左右长度分割 → 左先序、右先序
-
递归重复上面步骤,直到所有节点用完
举例演示
先序:`A B D E C F`
中序:`D B E A F C`
-
先序第一个A 是根
-
中序拆分:
左子树:`D B E`
根:A
右子树:`F C`
- 先序拆分:
左先序:`B D E`
右先序:`C F`
- 递归左子树:
先序左:B D E → B是左子树根
中序左:D B E → 左D,右E
- 递归右子树:
先序右:C F → C是右子树根
中序右:F C → 左F,无右
最终画出完整二叉树。
二、已知 后序 + 中序 → 构造二叉树
步骤口诀
-
后序最后一个元素 = 整棵树根
-
中序找根 → 分左、右子树
-
后序去掉末尾根,按长度分割左、右后序
-
递归构建左右子树
举例
后序:`D E B F C A`
中序:`D B E A F C`
-
后序最后 A 是根
-
中序分:左 `D B E` ,右 `F C`
-
后序拆分:左后序 `D E B`,右后序 `F C`
-
递归重复即可
三、为什么 先序+后序 不能唯一确定?
-
先序:根 左 右
-
后序:左 右 根
无法区分一个结点是左孩子还是右孩子
比如只有根+一个孩子:
先序AB,后序BA
既可以A左孩子B,也可以A右孩子B
两棵不同树,遍历序列完全一样
四、规律总结
- 找根永远靠先
2.分左右子树永远靠中序
- 子树长度严格相等:
中序左长度 = 先序左长度 = 后序左长度
- 递归思路:根 → 左子树递归 → 右子树递归
五、总结
-
由两种遍历序列唯一确定二叉树,必须包含中序序列
-
n 个结点二叉树,先序、中序、后序序列长度都为 n
-
叶子结点在先序、后序中的相对顺序不变
-
左右子树交换,先序↔后序改变,中序不变