层序遍历
使用层序建树进行建树
层序遍历代码思路
借助一个辅助队列。
- 先将二叉树的根结点入队,
- 然后出队,访问出队结点,
- 若它有左子树,则将左子树根节点入队;
- 若它有右子树,则将右子树根节点入队。
- 然后出队,
- 访问出队结点……如此反复,直到队列为空
// biTree——树的结构体指针,seQueue——辅助队列的结构体指针
// qElemType,辅助队列中存储的元素类型,这里为树结点的指针
void levelOrder(biTree t) {
seQueue seq;
qElemType e;
initQueue(seq);
// 根节点入队
enQueue(seq, t);
// 辅助队列为空时结束循环
while (seq->front != seq->rear) {
// 结点出队
deQueue(seq, e);
// 访问结点
cout << e->data << ' ';
// 若有左子树,左子树根节点入队
if (e->lChild != NULL) enQueue(seq, e->lChild);
// 若有右子树,右子树根节点入队
if (e->rChild != NULL) enQueue(seq, e->rChild);
}
cout << endl;
}
实现过程
根据上面的代码思路,需要实现两个数据结构,一个二叉树,一个队列,需要实现的功能有
- 二叉树、队列的数据结构定义
- 二叉树的创建、队列的初始化
- 二叉树的层序遍历、队列的出队、入队操作
实现结果&完整代码
/**
* 树的层序建树和层序遍历
*/
#include <iostream></