二叉树的层序遍历
- 描述:对于一棵二叉树,从根结点开始,按从上到下,从左到右的顺序访问每一个结点。每个结点仅仅访问一次。
例题
层次遍历结果:abfcdgeh
-
算法设计思路:使用一个队列
i.将根结点进队;
ii.队不为空:从队列中出列一个结点*p,访问它;
如果它有左孩子结点,将左孩子结点入队;
如果他有右孩子结点,将右孩子结点进队; -
使用队列类型定义如下:
typedef struct{
BTNode data[MaxSize];//存放队中元素
int front,rear;//队头和队尾指针
}SqQueue;//顺序循环队列类型
4.二叉树层序遍历算法代码实现:
voidLevelOrder(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);//有右孩子时将其进队
}
}