发新话题
打印

请老师指点,不胜感激!

请老师指点,不胜感激!

假设二叉树采用链接方式存储,编写一个中序遍历的非递归函数。
此题原解如下:
void inorder(btree *b)
{
btree *stack[Maxsize],*p;
int top=0;
p=b;
do
{
  while(p!=null)
  {
   top++;
   stack[top]=p;
   p=p->left;
  }
  if(top>0)
  {
   p=stack[top];
   top--;
   printf("%d",p->data);
   p=p->right;
  }
}while(p!=NULL||top!=0)
}                 
最后一句循环条件中的p!=NULL,我觉得应该去掉,原因如下:
对如图:
              ·
             ··
            ·  ·
           ··
          ·  ·
左下方叶子结点执行到倒数第四排:p=p->right;时p=NULL,按照循环条件,已退出了循环,但整树没有完成遍历!
我的分析对不对,请不吝分析指教!为谢!
I have a dream!

TOP

回复

这位仁兄,不知道是不是我想得太简单了
程序执行到你说的到那一步时,p==NULL但是这时候,top!=0,所以循环还没结束啊。
祝我们实现理想!!

TOP

发新话题