算法思想:
- 初始化一个辅助队列
- 根节点入队
- 若队列非空,则队头节点出队,访问该节点,并将其左孩子右孩子节点依次入队(如果存在)
- 重复第三步操作
//二叉树节点
typedef struct BiTNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
//链式队列节点
typedef struct LNode{
//数据项存储一个二叉树节点的地址
BitNode *data;
struct LNode *next;
}LNode;
typedef struct{
LNode *front,*rear;//队头队尾
}LinkQueue;
//层次遍历:深度从小到大;从左到右依次visit每个节点;
//如果要对某个节点有操作,在visit处处理。
void LevelOrder(BiTree T){
//初始化一个队列
LinkQueue Q;
InitQueue(&Q);
//声明一个二叉树
BiTree p;
//根节点入队
EnQueue(Q,T);
//队列非空作为循环条件循环
while(!IsEmpty(Q)){
Dequque(Q,q); //队头节点出队;第一次循环时根节点出队
visit(p) //访问队头结点;第一次循环时访问根节点
//如果队头结点的左孩子不为空,左孩子入队
if(p -> lchild != NULL)
Enqueue(Q,p->lchild);
//如果队头节点的右孩子不为空,右孩子入队
if(p -> rchild != NULL)
Enqueue(Q,p->rchild);
}
}