我实现了迭代后序算法以及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视为全局(在我的代码中,上面的代码片段是类的一部分,因此是根变量)
答案 0 :(得分:2)
问题出在这一行:
if(t->r!=NULL && t->r==st.top())
问题是此时堆栈可能为空,在这种情况下调用st.top()会导致程序崩溃。
您可以通过将行更改为:
来解决此问题if(t->r!=NULL && !st.empty() && t->r==st.top())
如果您的树的根目录在其左侧为NULL,而在其右侧为A,则程序将: