一、算法思想
- 初始化一个辅助队列
- 根节点入队
- 若队列非空,则队头结点出队,访问该结点,并将其左、右孩子插入对位(如果有的话)
- 重复3.直至队列空
二、代码实现
//二叉树的结点(链式存储)
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//链式队列结点
typedef struct LinkNode{
BiTNode * data; //存指针而不是结点
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear; //队头队尾
}LinkQueue;
//层序遍历
void LevelOrder(BiTree T){
LinkQueue Q;
InitQueue(Q); //初始化辅助队列(链队列:方便队列结点的拓展)
BiTree p; //p用来承接被出队的结点,详细见“第三章:4.队列的顺序实现”
EnQueue(Q,T); //将根结点入队
while(!IsEmpty(Q)){ //队列不为空则循环
DeQueue(Q,p); //队头结点出队
visit(p); //访问队头结点
if(p->lchild!=NULL)
EnQueue(Q,p->lchild); //左孩子入队
if(p->rchild!=NULL)
EnQueue(Q,p->rchild); //右孩子入队
}
}