层序创建二叉树所用的输入序列是按树的从上到下从左到右的顺序形成的,各层的空节点输入数值0。在构造二叉树的过程中,需要一个队列暂时存储各节点,其创建过程如下。
- 输入第一个数据:
- 若为0,表示此树为空,将空指针赋给根指针,树构造完毕。
- 若不为0,动态分配一个节点单元,并存入数据,同时将该节点放入队列。
- 若队列不为空,从队列拿出一个节点,并建立该节点的左右孩子:
- 从输入序列读入下一数据:
若读入数据为0,将出队节点的做孩子指针置空;否则,分配一个节点单元,存入所读数值,将其置为出队节点的左孩子,同时将该孩子节点入队。 - 再从输入序列读入下一个数据:
若读入数据为0,将出队节点的做孩子指针置空;否则,分配一个节点单元,存入所读数值,将其置为出队节点的右孩子,同时将该孩子节点入队。
- 从输入序列读入下一数据:
- 重复第2步过程,直到队列为空,再无节点出队,构造过程结束。
示例
构造如图所示二叉树所需的输入序列:
1 2 3 4 5 6 7 0 8 0 0 9 10 0 0 0 0 0 0 0 0
代码如下
#include <stdio.h>
#include "queue.h"