一. 由中序和前序确立二叉树
思路: 由前序确立分支点, 在中序中找到, 确定左右子树; 前序下一个点, 递归至树完全生成(从左分支画起)
eg1:
- 前序: ABCDEFGHIJ
- 中续: CDBFEAIHGJ
- 前序: ABCDEFGHIJ
- 中序: CDBFEAIHGJ
由前序确立分支点A, 在中序中找到A, 确定左右子树(中序中A左边的为左子树,右边为右子树)
(CDBFE) A (IHGJ)
/ \
前序换成下一个结点B, 在中序中找到B, 确定左右子树(中序中B左边的为左子树,右边为右子树)
(CDBFE) A (IHGJ)
/ \
(CD) B(EF)
前序换成下一个结点C, 在中序中找到C, 确定左右子树(中序中C左边的为左子树,右边为右子树)
(CDBFE) A (IHGJ)
/ \
(CD) B(EF)
/ \
(null)C(D)
//此时C左子树为null(空),右子树为D,不存在二义性,因此可以确定C的子树形状. C分支绘画完成
(CDBFE) A (IHGJ)
/ \
(CD) B(EF)
/ \
(null)C(D)
\
D
前序换成下一个结点E(由于D无二义性可直接跳过简化步骤), 在中序中找到E, 确定左右子树(中序中E左边的为左子树,右边为右子树)
(CDBFE) A (IHGJ)
/ \
(CD) B(EF)
/ \
(null)C(D) (F)E(null)
\
D
//此时E左子树为F,右子树为null(空),不存在二义性,因此可以确定E的子树形状. E分支绘画完成
(CDBFE) A (IHGJ)
/ \
(CD) B(EF)
/ \
(null)C(D) (F)E(null)
\ /
D F
前序换成下一个结点G(由于F无二义性可直接跳过简化步骤), 在中序中找到G, 确定左右子树(中序中G左边的为左子树,右边为右子树)
(CDBFE) A (IHGJ)
/ \
(CD) B(EF) (HI)G(J)
/ \
(null)C(D) (F)E(null)
\ /
D F
前序换成下一个结点H, 在中序中找到H, 确定左右子树(中序中H左边的为左子树,右边为右子树)
(CDBFE) A (IHGJ)
/ \
(CD) B(EF) (HI)G(J)
/ \ / \
(null)C(D) (F)E(null) (I)H(null)
\ /
D F
//此时H左子树为I,右子树为null(空),不存在二义性,因此可以确定H的子树形状. H分支绘画完成
(CDBFE) A (IHGJ)
/ \
(CD) B(EF) (HI)G(J)
/ \ / \
(null)C(D) (F)E(null) (I)H(null)
\ / /
D F I
//此时G左子树分支完成,右子树为J,不存在二义性,因此可以确定G的子树形状. G分支绘画完成
(CDBFE) A (IHGJ)
/ \
(CD) B(EF) (HI)G(J)
/ \ / \
(null)C(D) (F)E(null) (I)H(null) J
\ / /
D F I
//由前序: ABCDEFGHIJ &中续: CEDBHGJIFA确定的唯一树已经画完
--------------------------------------我是分割线--------------------------------------
二. 由中序和后序确立二叉树
思路: 剔除后续最后一个点(根结点)后, 由后序(从右向左)确立分支点, 在中序中找到, 确定左右子树; 前序下一个点, 递归至树完全生成(从右分支画起)
eg2:
- 后序: DCFEBIHGA
- 中续: DCBFEAGHI
- 后序: DCFEBIHGA
- 中续: DCBFEAGHI
后续的最后一个点即为根节点(A)
(DCBFE) A (GHI)
后序换成上一个结点G, 在中序中找到G, 确定左右子树(中序中G左边的为左子树,右边为右子树)
(DCBFE) A (GHI)
/ \
(null)G(HI)
后序换成上一个结点H, 在中序中找到H, 确定左右子树(中序中H左边的为左子树,右边为右子树)
(DCBFE) A (GHI)
/ \
(null)G(HI)
\
(null)H(I)
//此时H左子树为null(空),右子树为I,不存在二义性,因此可以确定H的子树形状. H分支绘画完成
(DCBFE) A (GHI)
/ \
(null)G(HI)
\
(null)H(I)
\
I
后序换成上一个结点B(由于I无二义性可直接跳过简化步骤), 在中序中找到B, 确定左右子树(中序中B左边的为左子树,右边为右子树)
(DCBFE) A (GHI)
/ \
(DC)B(FE) (null)G(HI)
\
(null)H(I)
\
I
后序换成上一个结点E, 在中序中找到E, 确定左右子树(中序中E左边的为左子树,右边为右子树)
(DCBFE) A (GHI)
/ \
(DC)B(FE) (null)G(HI)
\ \
(null)E(F) (null)H(I)
\
I
//此时E左子树为null(空),右子树为F,不存在二义性,因此可以确定E的子树形状. E分支绘画完成
(DCBFE) A (GHI)
/ \
(DC)B(FE) (null)G(HI)
\ \
(null)E(F) (null)H(I)
\ \
F I
后序换成上一个结点C(由于F无二义性可直接跳过简化步骤), 在中序中找到C, 确定左右子树(中序中C左边的为左子树,右边为右子树)
(DCBFE) A (GHI)
/ \
(DC)B(FE) (null)G(HI)
/ \ \
(D)C(null) (null)E(F) (null)H(I)
\ \
F I
//此时C左子树为D,右子树为null(空),不存在二义性,因此可以确定C的子树形状. C分支绘画完成
(DCBFE) A (GHI)
/ \
(DC)B(FE) (null)G(HI)
/ \ \
(D)C(null) (null)E(F) (null)H(I)
/ \ \
D F I
//由后序: DCFEBIHGA &中续: DCBFEAGHI确定的唯一树已经画完
Copyright: dolor_059