实际上,如果知道其中任意2个扫描的顺序,就可以推定剩下的1个扫描方式的顺序。 在这里,我们只是:
知道前相横移和中相横移,以后相横移为例,其他组合方法原理也是一样的。 要完成此任务,首先要利用以下特征:
特性a,对于先前的遍历,初始必须是根节点;
特性b,对于后续遍历,最后一个必须是根节点;
特性c利用前序或后序遍历确定根节点,中序遍历中将根节点两侧分为左右子树;
特性d相当于对左边的子树和右边的子树分别进行前面三点的分析和分割,进行递归,我们可以重构完整的二叉树;
举个例子吧。 假设:
前扫描顺序为: CABGHEDF
中顺序扫描的顺序为: GHBACDEF
第一步,根据特性a可知根节点为c,然后根据特性c可知左子树为: GHBA,右子树为: DEF。
C
/
GHBA DEF
然后取出左子树,左子树的前相遍历为ABGH,中相遍历为GHBA,根据特性a和c可知,左子树的父节点为a,且a中没有右子树。
C
/
A DEF
/
GBH
在步骤3中,使用同样的方法,假设将前序设为BGH,将中序设为GHB,将父节点设为b,将GH设为左子树,没有右子树。
C
/
A DEF
/
B
/
GH
步骤4、前序为GH,中序为GH,所以g为父节点,h为右子树,没有左子树。
步骤C/ A DEF/B/G H,返回右边的子树,其前序为EDF,中序为DEF,仍然根据特性a和c,父节点为e,左右节点为d和f。
C
/
A E
//
B D F
/
g
(到此为止,我们得到了这个完整的二叉树。 因此,后续遍历为: HGBADFEC