算法的设计思路:使用一个队列
(1)将根结点进队
(2)队不空时循环:从队列中出列一个结点*p,访问它
①若它有左孩子结点,将左孩子结点进队
②若它有右孩子结点,将右孩子结点进队
定义:
typedef struct{
BTNode data[MaxSize];//存放队中元素
int front,rear;//队头和队尾指针
}SqQueue;//顺序循环队列类型
二叉树层次遍历算法:
void LevelOrder(BTNode b){
BTNode p; SqQueue *qu;
InitQueue(qu); //初始化队列
enQueue(qu,b); //根结点指针进入队列
while(!QueueEmpty(qu)){ //队不为空,则循环
deQueue(qu,p); //出队结点p
printf(“%c”,p->data); //访问结点p
if(p->lchild !=NULL) enQueue(qu,p->lchild); //有左孩子时将其进队
if(p->rchild !=NULL) enQueue(qu,p->rchild); //有右孩子时将其进队
}
}
