二叉树层次遍历 帮忙加注释理解一下!谢谢
void levelorder(bt *t) //层次遍历????????????????????
{
int i,j;
bt *q[100],*p;
p=t;
if(p!=NULL)
{ i=1; q[i]=p; j=2; }
while(i!=j)
{
p=q[i];
cout<<p->data;
if(p->lchild!=NULL)
{ q[j]=p->lchild; j++;}
if(p->rchild!=NULL)
{ q[j]=p->rchild; j++; }
i++;
}
}
[解决办法]
void levelorder(bt *t) //层次遍历????????????????????
{
//采用队列实现,因为队列的特点是先进先出
int i,j; //i代表队列头,j代表队列尾
bt *q[100],*p; //数组q即队列
p=t;
if(p!=NULL) //首先将根结点入队
{ i=1; q[i]=p; j=2; }
while(i!=j) //若队列不为空
{
p=q[i]; //将队头元素取出
cout<<p->data;
if(p->lchild!=NULL) //如果左孩子不为空,则左孩子入栈
{ q[j]=p->lchild; j++;}
if(p->rchild!=NULL) // 如查右孩子不为空,则右孩子入栈
{ q[j]=p->rchild; j++; }
i++; //队头后移一位。这条语句 放在"p=q[i];"后面更容易理解
}
}