[英]binary search tree postorder traversal by iteration
我实现了迭代后序算法以及pre和inorder。 但迭代的后序不起作用。所有我的努力都是徒劳地发现错误。 程序在按顺序打印树的最后一个节点数据之前崩溃。
这是代码片段。
t=root;
while(t!=NULL || !st.empty())
{
if(t!=NULL)
{
if(t->r!=NULL)
st.push(t->r);
st.push(t);
t=t->l;
}
else
{
t=st.top();
st.pop();
if(t->r!=NULL && t->r==st.top())
{
st.pop();
st.push(t);
t=t->r;
}
else
{
cout<<t->data<<" ";
t=NULL;
}
}
}
更多信息:st是STL堆栈并将root视为全局(在我的代码中,上面的代码片段是类的一部分,因此是root变量)
问题出在这一行:
if(t->r!=NULL && t->r==st.top())
问题是此时堆栈可能为空,在这种情况下调用st.top()将导致程序崩溃。
您可以通过将行更改为:
if(t->r!=NULL && !st.empty() && t->r==st.top())
如果你的树的根在左边是NULL,在它的右边是A,那么程序将:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.