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;
}
}
这是我写的后序非递归遍历二叉树。我用这个与后序递归遍历二叉树一起输出,结果是一样的,可是输出后程序立马就崩溃了。到底问题出在哪,实在想不明。
使用一个堆栈记录下之前遍历的节点。
看看别人的实现,参考一下:
【数据结构与算法】二叉树递归与非递归遍历(附完整源码)
最好贴出完整的代码(你可以把代码贴在codepad.org上,然后将产生的链接贴在这里)
你也可以自己调试下,按f5(而不是ctrl+f5)运行程序,然后程序出错的时候选择中断,会提升出错的代码行,仔细检查下指针之类的问题。