Rui_Xian_Qi_Mu 2016-10-23 08:03 采纳率: 100%
浏览 952
已采纳

这段二叉树的后序非递归遍历错了,请问怎么改

 #include<iostream>
using namespace std; 
template<class DataType>
struct element
{
    BiNode<DataType> * ptr;
    int flag;       //这是一个标志,flag=1时表示第一次出栈,只遍历完左子树,该节点不能访问,flag=2时表示只遍历完右子树,该节点可以访问 
};

//设根指针为bt 
template<class DataType>
void BiTree<DataType>::PostOrder(BiNode<DataType> * bt)
{
    top = -1;           //采用顺序栈,并假定栈不会发生上溢 
    while(bt!=NULL||top!=-1)        //两个条件都不成立才会退出循环 
    {
        while(bt!=NULL)
        {
            top++;
            s[top].ptr=bt;
            s[top].flag=1;      //root连同标志flag入栈 
            bt=bt->lchild;
        }
        while(top!=-1&&s[top].flag=2)
        {
            bt=s[top--].ptr;
            cout<<bt->data;
        }
        if(top!=-1)
        {
            s[top].flag=2;
            bt=s[top].ptr->rchild;
        }
    }
}

展开全部

  • 写回答

4条回答 默认 最新

  • Rui_Xian_Qi_Mu 2017-02-06 22:16
    关注

    实际这段代码只是在走到根节点时出现了死循环,只要加一句bt=NULL;终止了循环,问题就得以解决了!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部