首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

二叉树层次遍历 帮忙加注释理解一下!多谢

2012-03-06 
二叉树层次遍历帮忙加注释理解一下!谢谢void levelorder(bt *t) //层次遍历????????????????????{int i,j

二叉树层次遍历 帮忙加注释理解一下!谢谢
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];"后面更容易理解
}
}

热点排行