目录
一、二叉树的层序遍历
算法思想:
①初始化一个辅助队列
②根结点入队
③若队列非空,则队头结点出队,访问该结点,将其左右孩子插入队尾(如果有的话)
④重复③直至队列为空
二、代码实现
//层序遍历
void LevelOrder(BiTree T){
LinkQueue Q;
InitQueue(Q); //初始化辅助队列
BiTree p;
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); //右孩子入队
}
}
//二叉树的结点(链式存储)
typedef struct BiTNode{
char data;
struct BiTNode *lchild,rchild;
}
//链式队列结点
typedef struct LinkNode{
BiTNode * data; //存指针而不是结点
struct LinkNode *next;
}
typedef struct{
LinkNode *front,*rear;
}LinkQueue;