一颗二叉树的先序遍历为abdfcegh,中序序列为bfdagehc①画出这颗二叉树②画出这颗 二叉树的后序线索树③转换成森林
时间: 2023-07-23 17:28:24 浏览: 305
①画出这颗二叉树:
```
a
/ \
b c
/ / \
d e f
/ / \
g h i
```
②画出这颗二叉树的后序线索树:
```
d
/ \
g b
/ / \
h e c
/ \
i a
```
其中,实线表示原本存在的指针,虚线表示线索。
③转换成森林的过程:
先根据后序线索树找到根节点a,以a为根节点分离出一棵子树。
然后找到b,以b为根节点分离出一棵子树。
接着找到c,以c为根节点分离出一棵子树。
最后对于每个子树,以其中序遍历的最后一个节点为根,分离出子树。
得到如下森林:
```
a
|
+-b
| |
| +-d
| |
| +-g
|
+-e
| |
| +-h
|
+-f
|
+-i
c
|
+-h
|
+-i
```
相关问题
一颗二叉树的先序遍历为abdfcegh,中序序列为bfdagehc 转换成森林
根据先序遍历和中序遍历构造出该二叉树,然后将该二叉树转换成森林。具体步骤如下:
1. 根据先序遍历确定该二叉树的根节点为a。
2. 在中序遍历中找到根节点a,将中序遍历分为两个部分,左子树的中序遍历为bfd,右子树的中序遍历为gehc。
3. 根据左子树的中序遍历bfd和左子树的先序遍历bdfe构造左子树,右子树的中序遍历gehc和右子树的先序遍历cegh构造右子树。
4. 将左右子树分别转换成森林,得到两棵树,将它们作为根节点a的左右子树。
最终得到的森林如下图所示:
```
a c
/ \ \
b d e
/ \ \
f e g
/ \ \
c g h
/ \
h d
```
设一棵二叉树的先序序列为ABDFCEGH,中序序列为BFDAGEHC,画出这棵二叉树的后序线索树。
首先,我们通过先序遍历和中序遍历来重建这棵二叉树。先序遍历通常根节点在前,左子树接着右子树,而中序遍历则是左子树、根节点、右子树的顺序。
根据给定的序列:
- 先序遍历 ABDFCEGH 表示 A(根) -> B -> D -> F -> C -> E -> G -> H
- 中序遍历 BFDAGEHC 表示 B -> F -> D -> A -> G -> E -> C -> H
我们可以确定节点A是根节点,并且B在其左子树,F在B的左子树,D在F的右子树,以此类推。
构建后序线索树,我们需要按照后序遍历的顺序,即D->B->F->H->E->C->G-A。后序线索树的特点是在每个非叶子节点上添加指向其子节点的线索,以及特殊的空指针表示。
以下是这棵树的后序线索树结构:
```
A
/ \
B C
/ \ \
D E G
/ \
F H
|
null (指向中序遍历的下一个元素)
```
在这个结构中,每个节点都有两个指针:一个常规的左孩子指针和一个指向兄弟节点的右线索。由于二叉树是满的(所有节点都有两个子节点),所以所有节点都有右线索。具体到这个例子,如F节点的右线索就是H,因为F是H的父亲节点,在中序遍历中H在F之后。
阅读全文