考研复习整理之——二叉树层次遍历
1.思路
层次遍历,是指由左至右,由上之下,由层遍历一棵树。在层次遍历中,用到的不是递归,而是循环,通过建立一个队列,每次循环将所需遍历的结点出队并访问,然后再将改结点的子节点按由左至右的顺序入队,反复循环直至检测到队列为空,即说明已经遍历完毕。
注:这个队列应该存储的是结点的指针而不是结点,原因是因为树已经构建好了,如果存储结点的话会复制一份到队列中,浪费内存不说,而且没有必要。
2.代码
//level traversal层次遍历
void L_trave(TNode * p)
{
if(p == NULL)
{
pass;
}
else
{
TNode * queue[5];
int front = 0 ,rear = 0;
queue[++rear] = p;
while(front!=rear)
{
front = (front+1)%maxSize;
visit(queue[front]);
if(queue[front]->lchild !=NULL)
queue[++rear] = queue[front]->lchild;
if(queue[front]->rchild !=NULL)
queue[++rear] = queue[front]->rchild;
}
}
}