层序遍历二叉树的过程和层序生成二叉树的过程类似,都是要借助一个队列来实现。具体过程是:
- 将根结点入队
- 取出队首结点,访问该结点
- 若该结点的左孩子非空,则将左孩子入队
- 如果右孩子非空,将右孩子入队
- 重复过程2,3,4 直到队列为空
如图二叉树层序遍历结果为:1 2 3 4 5 6 7 8 9 10
代码实现如下(此处队列的实现参见前面关于循环队列的博文)
void LevelOrderTraveral(BinTree BT)
{
BinTree T;
Queue Q;
Q.front = Q.rear = 0;
T = BT;
if(!T){
return;
}
else{
AddQ(&Q,T);
while(!IsEmptyQ(&Q)){
T = DeleteQ(&Q);
printf("%d ", T->Date);
if(T->Left)
AddQ(&Q,T->Left);
if(T->Right)
AddQ(&Q,T->Right);
}
}
}