由遍历序列得到二叉树
——这里讨论的只是在纸上逻辑图形的推导,不涉及
计算机上的算法。适用于解决考卷上的问题。
由两种遍历序列可得到二叉树,其实是不完全正确的。由前序遍历序列和中序遍历序列或者中序遍历序列和后序遍历序列可以得到二叉树。由前序遍历序列和后序遍历序列不一定能得到确定的二叉树。
例:
前序遍历序列:AB
后序遍历序列:BA
就无法确定B是A的左孩子还是右孩子。
经研究后发现,如果二叉树含有度(孩子数)为一的节点,那么由它的前序遍历序列和后序遍历序列就不能确定该二叉树。但如果知道所求的二叉树是完全二叉树(没有度为一的节点),则可以确定二叉树。
由前序遍历序列和中序遍历序列得到二叉树:
比如二叉树有七个节点(包括根)
1建立7*8的表格,将中序遍历序列写在最上一行。
2然后前序遍历序列的顺序将该节点写在2-8行(节点与中序序列在同一列)。
3然后从上到下连接,将某节点与该节点以下最高的左节点和最高右节点连接。
即得到二叉树。
例:
前序遍历序列:ABDECFG
中序遍历序列:DBEAFCG
D | B | E | A | F | C | G |
|
|
| A |
|
|
|
| B |
|
|
|
|
|
D |
|
|
|
|
|
|
|
| E |
|
|
|
|
|
|
|
|
| C |
|
|
|
|
| F |
|
|
|
|
|
|
|
| G |
|
|
| A |
|
|
|
| B |
|
|
|
|
|
D |
|
|
|
|
|
|
|
| E |
|
|
|
|
|
|
|
|
| C |
|
|
|
|
| F |
|
|
|
|
|
|
|
| G |
由后序遍历序列和中序遍历序列得到二叉树:
1与(前序和中序1)相同。
2将后序遍历序列,按从后向前的顺序填表。
3同(前序和中序3)。
二叉树是满二叉树,由前序遍历序列和后序遍历序列得到二叉树:
比如二叉树有七个节点(包括根)
1建立7*8的表格,将后序遍历序列(前序遍历序列)写在最上一行。
2将前序遍历序列(后序遍历序列),按从前向后的顺序(从后向前的顺序)填表。注意:新加节点不能在任一已加节点的左下对角线(右下对角线)上,否则加一空列。
3将表格逆时针(顺时针)旋转45°。
4同(前序和中序3)。
得到二叉树。
例:
前序遍历序列:ABDECFG
后序遍历序列:DEBFGCA
D | E | B | F | G | C | A |
|
|
|
|
|
| A |
|
| B |
|
|
|
|
D |
|
|
|
|
|
|
| E |
|
|
|
|
|
|
|
|
|
| C |
|
|
|
| F |
|
|
|
|
|
|
| G |
|
|
若有错误之处,欢迎大家指正。