有关后序非递归遍历二叉树的问题

void show_LRD(tree LRD)
{
//后序非递归遍历二叉树
int otherstack[max];//辅助栈,用于检测出栈时是否已经遍历右子树
int *othertop,*otherbottom;
tree temp;
othertop=otherbottom=otherstack;
while(LRD||!emptystack())
{
while(LRD)
{
while(LRD)
{

inputstack(LRD);
*othertop++=0;
LRD=LRD->lchild;
}
LRD=gettopstack();
LRD=LRD->rchild;
*(othertop-1)=1;
}
while(
(othertop-1)==1)
{
popstack(&temp);
printf("%c",temp.date);
othertop--;
}
*(othertop-1)=1;
LRD=gettopstack();
LRD=LRD->rchild;
}
}
这是我写的后序非递归遍历二叉树。我用这个与后序递归遍历二叉树一起输出,结果是一样的,可是输出后程序立马就崩溃了。到底问题出在哪,实在想不明。

3个回答

使用一个堆栈记录下之前遍历的节点。

最好贴出完整的代码(你可以把代码贴在codepad.org上,然后将产生的链接贴在这里)

你也可以自己调试下,按f5(而不是ctrl+f5)运行程序,然后程序出错的时候选择中断,会提升出错的代码行,仔细检查下指针之类的问题。

91program
91program http://blog.csdn.net/hackbuteer1/article/details/6583988 遍历二叉树的各种操作(非递归遍历)
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐