层次遍历即按照每一行从左到右对二叉树的各个结点进行访问。
算法思想:可以借助一个队列,首先将二叉树的根结点入队,然后出队并访问出队结点,如果有左孩子结点,左孩子结点也入队;如果有右孩子结点,右孩子结点也入队。然后出队并访问出队结点,直到队列为空为止。
举例:
层次遍历的访问顺序依次为A—B—F—C—D—G—E—H
层次遍历算法:
void levelOrder(BiTree T)
{
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);//右孩子结点出队
}
}