1.按先序序列构造一棵二叉链表表示的二叉树T; 2.对这棵二叉树进行递归遍历:先序、中序、后序以及层次遍历遍历序列,分别输出结点的遍历序列; 3. 对这棵树用非递归方式进行遍历:先序、中序以及后序遍历序列,分别输出结点的遍历序列; 4.求二叉树的深度/结点数目/叶结点数目; 5.将二叉树每个结点的左右子树交换位置; 6. 设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树); 7. 计算二叉树最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值); 8. 求二叉树中第一条最长的路径长度,并输出此路径上各结点。
时间: 2023-11-27 20:53:52 浏览: 97
先序、中序、后序遍历并显示二叉树.rar_class33v_saleps2_二叉树_后序遍历
1. 以先序序列ABD##E##CF###构造的二叉树如下:
```
A
/ \
B C
/ \
D E
```
2. 递归遍历:
- 先序遍历序列:ABDECF
- 中序遍历序列:DBEAFC
- 后序遍历序列:DEBFCA
- 层次遍历序列:ABCDEF
3. 非递归遍历:
- 先序遍历序列:ABDECF
```
先将根节点A入栈,然后循环执行以下操作:
1. 弹出栈顶节点,输出该节点的值;
2. 将该节点的右子节点入栈(如果有的话);
3. 将该节点的左子节点入栈(如果有的话)。
循环结束条件为栈为空。
```
- 中序遍历序列:DBEAFC
```
将根节点A入栈,然后循环执行以下操作:
1. 如果栈顶节点有左子节点,则将其左子节点入栈,并将该节点的左子节点置为null;
2. 如果栈顶节点没有左子节点,则弹出栈顶节点,输出该节点的值,并将该节点的右子节点入栈(如果有的话)。
循环结束条件为栈为空。
```
- 后序遍历序列:DEBFCA
```
将根节点A入栈,然后循环执行以下操作:
1. 如果栈顶节点有左子节点或右子节点,则按左子节点、右子节点、根节点的顺序入栈;
2. 如果栈顶节点既没有左子节点也没有右子节点,则弹出栈顶节点,输出该节点的值;
循环结束条件为栈为空。
```
4. 深度:3,结点数目:6,叶结点数目:3。
5. 交换左右子树后的二叉树如下:
```
A
/ \
C B
/ \
E D
```
6. 双序遍历序列:ABCEDBF
```
算法实现:
1. 将根节点入栈,循环执行以下操作:
2. 如果栈不为空,则弹出栈顶节点,输出该节点的值,并将其右子节点入栈(如果有的话);
3. 如果该节点有左子节点,则将其左子节点入栈,并将该节点的左子节点置为null;
4. 如果该节点没有左子节点,但是右子节点不为空,则将该节点入栈,并将该节点的右子节点置为null。
5. 循环结束条件为栈为空。
```
7. 最大宽度为3,即第3层的结点数目最多。
8. 最长路径为5,路径为A-B-E-D-C,其中各结点为A、B、E、D、C。
阅读全文