3 二叉树的推导

3.1 由前序中序推导

已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:

Ø 根据前序序列的第一个元素建立根结点;

Ø 在中序序列中找到该元素,确定根结点的左右子树的中序序列;

Ø 在前序序列中确定左右子树的前序序列;

Ø 由左子树的前序序列和中序序列建立左子树;

Ø 由右子树的前序序列和中序序列建立右子树。

3.2 由中序后序推导

已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:

Ø 根据后序序列的最后一个元素建立根结点;

Ø 在中序序列中找到该元素,确定根结点的左右子树的中序序列;

Ø 在后序序列中确定左右子树的后序序列;

Ø 由左子树的后序序列和中序序列建立左子树;

Ø 由右子树的后序序列和中序序列建立右子树。

详细说明:
1.利用前序序列和中序序列恢复二叉树
二叉树的前序遍历是先访问根结点,再按前序遍历方式遍历根结点的左子树和右子树,即由前序序列可以确定
二叉树的根结点。另一方面,中序遍历是先中序遍历左子树,然后访问根结点,最后中序遍历右子树;根结点
在中序序列中必然将结点分割成为两个子序列,根结点前的子序列是其左子树的中序序列,根结点后的子序列
是其右子树的中序序列。现在可以根据这两个子序列在前序序列中找到对应的左子序列和右子序列,两个子序
列在前序中的第一个结点分别是根结点的左孩子结点和右孩子结点,即左子树和右子树的根结点;此时左右子
树的根结点又分别把左右子序列各划分成两个子序列。如此一直做下去,由前序序列确定各级子树的根结点,
由中序序列确定隶属于各级子树的左右子树的结点,当取尽前序序列中的所有结点时,各级子树的左右孩子都
唯一确定了,二叉树也就恢复了;而且这种恢复是唯一的。

2.利用后序序列和中序序列恢复二叉树
利用后序序列和中序序列也可以唯一确定一棵二叉树。在恢复二叉树的过程中,后序序列的作用如同前面的前
序序列一样是确定各级子树的根结点;无非是前序序列中第一个结点是根结点而后序序列中最后一个结点为根
结点。中序序列的作用仍然是确定隶属于各级子树的左右子树中的结点,当各级子树中的左右孩子都唯一确定
时,二叉树就恢复了。

3.利用层次序列和中序序列恢复二叉树
利用层次序列和中序序列也可以唯一确定(或恢复)一棵二叉树。层次遍历是从上到下处于不同层次的各级子树
根结点的前后顺序序列,在同层中是从左到右依次顺序排列的。先由层次序列知其第一个结点为二叉树的根结
点,由中序序列区分隶属于左右子树的结点序列;这样的过程一直进行下去直到其每一级子树的孩子结点都唯
一确定,二叉树就恢复了。

在上面讨论的二叉树的恢复过程中,中序序列所起的作用是很重要的,只有利用中序序列才能区分各级子树中隶属于
左右子树的各结点,而前序序列、后序序列或层次序列的作用仅在于确定左右子树的根结点。所以利用前序、后序和
层次序列的作用仅在于确定各级子树的根结点。所以利用前序、后序还是层次序列中的任何两种序列或三种序列全用
都不能唯一确定(或恢复)一棵二叉树,这是因为只知根结点而无法区分左右子树之缘故。