假设二叉树采用链接方式存储,编写一个中序遍历的非递归函数。
此题原解如下:
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,按照循环条件,已退出了循环,但整树没有完成遍历!
我的分析对不对,请不吝分析指教!为谢!