|
1 | 1 | ## 1. 二叉树的还原简介
|
2 | 2 |
|
3 | | -> 二叉树的还原:指的是通过二叉树的遍历序列,还原出对应的二叉树。 |
| 3 | +> **二叉树的还原**:指的是通过二叉树的遍历序列,还原出对应的二叉树。 |
4 | 4 |
|
5 | 5 | 从二叉树的遍历过程可以看出,给定一棵非空二叉树,它的前序、中序、后续遍历所得到的遍历序列都是唯一的。那么反过来,如果已知节点的某种遍历序列,能否确定这棵二叉树呢?并且确定的二叉树是否是唯一的呢?
|
6 | 6 |
|
|
19 | 19 | 2. 以后序遍历的方式遍历根节点的右子树。
|
20 | 20 | 3. 访问根节点。
|
21 | 21 |
|
22 | | -先来看二叉树的前序遍历,前序遍历过程中首先访问的是根节点,所以通过前序遍历序列,我们可以确定序列的第 `1` 个节点肯定是根节点。但是从第 `2` 个节点开始就不确定它是根节点的左子树还是根节点的右子树了。所以单凭前序遍历序列是无法恢复一棵二叉树的。 |
| 22 | +先来看二叉树的前序遍历,前序遍历过程中首先访问的是根节点,所以通过前序遍历序列,我们可以确定序列的第 1ドル$ 个节点肯定是根节点。但是从第 2ドル$ 个节点开始就不确定它是根节点的左子树还是根节点的右子树了。所以单凭前序遍历序列是无法恢复一棵二叉树的。 |
23 | 23 |
|
24 | | -同理再来看二叉树的后序遍历,后序遍历也是只能确定序列的最后一个节点为根节点,而无法确定其他节点在二叉树中的位置。所以单凭后序遍历序列也是无法恢复一棵二叉树的。 |
| 24 | +再来看二叉树的后序遍历,后序遍历也是只能确定序列的最后一个节点为根节点,而无法确定其他节点在二叉树中的位置。所以单凭后序遍历序列也是无法恢复一棵二叉树的。 |
25 | 25 |
|
26 | 26 | 最后我们来看二叉树的中序遍历,中序遍历是先遍历根节点的左子树,然后访问根节点,最后遍历根节点的右子树。这样,根节点在中序遍历序列中必然将中序序列分割成前后两个子序列,其中前一个子序列是根节点的左子树的中序遍历序列,后一个子序列是根节点的右子树的中序遍历序列。当然单凭中序遍历序列也是无法恢复一棵二叉树的。
|
27 | 27 |
|
28 | | -但是如果我们可以将前序遍历序列和中序遍历序列相结合,那么我们就可以通过上面中序遍历序列中的两个子序列,在前序遍历序列中找到对应的左子序列和右子序列。在前序遍历序列中,左子序列的第 `1` 个节点是左子树的根节点,右子序列的第 `1` 个节点是右子树的根节点。这样,就确定了二叉树的 `3` 个节点。 |
| 28 | +但是如果我们可以将「前序遍历序列」和「中序遍历序列」相结合,那么我们就可以通过上面中序遍历序列中的两个子序列,在前序遍历序列中找到对应的左子序列和右子序列。在前序遍历序列中,左子序列的第 `1` 个节点是左子树的根节点,右子序列的第 `1` 个节点是右子树的根节点。这样,就确定了二叉树的 `3` 个节点。 |
29 | 29 |
|
30 | 30 | 同时,左子树和右子树的根节点在中序遍历序列中又可以将左子序列和右子序列分别划分成两个子序列。如此递归下去,当确定了前序遍历序列中的所有节点时,我们就得到了一棵二叉树。
|
31 | 31 |
|
|
37 | 37 |
|
38 | 38 | 同理,**如果已知一棵二叉树的中序序列和后序序列,也可以唯一地确定这棵二叉树。** 方法和通过二叉树的前序序列和中序序列构造二叉树类似,唯一不同点在于二叉树的根节点是根据后序遍历序列的最后一个元素确定的。
|
39 | 39 |
|
40 | | -类似的,**已知二叉树的中序遍历序列和层序遍历序列,也可以唯一地确定一棵二叉树。** |
| 40 | +类似的,**已知二叉树的「中序遍历序列」和「层序遍历序列」,也可以唯一地确定一棵二叉树。** |
41 | 41 |
|
42 | | -需要注意的是:**如果已知二叉树的前序遍历序列和后序遍历序列,是不能唯一地确定一棵二叉树的。** 这是因为没有中序遍历序列无法确定左右部分,也就无法进行子序列的分割。 |
| 42 | +需要注意的是:**如果已知二叉树的「前序遍历序列」和「后序遍历序列」,是不能唯一地确定一棵二叉树的。** 这是因为没有中序遍历序列无法确定左右部分,也就无法进行子序列的分割。 |
43 | 43 |
|
44 | | -只有二叉树中每个节点度为 `2` 或者 `0` 的时候,已知前序遍历序列和后序遍历序列,才能唯一地确定一颗二叉树,如果二叉树中存在度为 `1` 的节点时是无法唯一地确定一棵二叉树的,这是因为我们无法判断该节点是左子树还是右子树。 |
| 44 | +只有二叉树中每个节点度为 2ドル$ 或者 0ドル$ 的时候,已知前序遍历序列和后序遍历序列,才能唯一地确定一颗二叉树,如果二叉树中存在度为 1ドル$ 的节点时是无法唯一地确定一棵二叉树的,这是因为我们无法判断该节点是左子树还是右子树。 |
45 | 45 |
|
46 | 46 | ## 2. 从前序与中序遍历序列构造二叉树
|
47 | 47 |
|
|
0 commit comments