小刘忙啊 2013-11-06 23:49 采纳率: 100%
浏览 2280
已采纳

不用栈的非递归二叉树遍历 求改正 (C++新手)

原程序如下,添加了双亲域parent和标志域mark;不知道哪里不对:

#include"iostream"
using namespace std;
class BinTree;

class BinNode
{
private:
int data;

BinNode *lchild;
BinNode *rchild;
BinNode *parent;
int mark;
friend class BinTree;

};

class BinTree
{
private:
BinNode *root;

public:
BinTree()
{
root=0;
}

BinNode *Get_Root()
{
    return root;
}

BinNode *Create_Tree(BinNode *r)    //先序建立二叉树
{
    int d;
    cout<<"输入数据(0代表空):";
    cin>>d;
    if(d==0)
        return NULL;
    else
    {
        r=new BinNode;
        r->data=d;
        r->lchild=Create_Tree(r->lchild);
        r->rchild=Create_Tree(r->rchild);
    }
    root=r;
    return r;
}

void InOrder_rec1(BinNode *p)   //xian序遍历
{

    if(p)
    {
        cout<<p->data<<"  ";
        InOrder_rec1(p->lchild);
        InOrder_rec1(p->rchild);
    }
}
void InOrder_rec2(BinNode *p)   //中序遍历
{

    if(p)
    {
        InOrder_rec2(p->lchild);
        cout<<p->data<<"  ";
        InOrder_rec2(p->rchild);
    }
}


void PostOrder_rec(BinNode *p)//后续遍历
{
    BinNode*t=p;
    t->mark=0;
    while (t)
    {
        switch(t->mark){
        case 0:

            t->mark=1;
            if(t->lchild) t=t->lchild;
            break;
        case 1:
            t->mark=2;
            if(t->rchild) t=t->rchild;

        case 2:
            cout<<t->data<<endl;
            t->mark=0;
            t=t->parent;
            break;
                default:; 

        }
    }

}

};

int main()
{
BinTree tree;
BinNode *p=NULL;
p=tree.Create_Tree(p);

cout<<"先序遍历二叉树:";
tree.InOrder_rec1(p);
cout<<endl;

cout<<"中序遍历二叉树:";
tree.InOrder_rec2(p);
cout<<endl;

cout<<"中序遍历二叉树:";
tree.PostOrder_rec(p);
cout<<endl;

}

  • 写回答

1条回答

  • CodefansZ 2013-11-09 06:01
    关注
    #include"iostream"
    using namespace std;
    class BinTree;
    
    class BinNode
    {
    private:
        int data;
    
        BinNode *lchild;
        BinNode *rchild;
        BinNode *parent;
        int mark;
        friend class BinTree;
    };
    
    class BinTree
    {
    private:
        BinNode *root;
    
    public:
        BinTree()
        {
            root=0;
        }
    
        BinNode *Get_Root()
        {
            return root;
        }
    
        BinNode *Create_Tree(BinNode *r)    //先序建立二叉树
        {
            int d;
            cin>>d;
            if(d==0)
                return NULL;
            else
            {
                r=new BinNode;
                r->data=d;
                r->lchild=Create_Tree(r->lchild);
                r->rchild=Create_Tree(r->rchild);
            }
            root=r;
            return r;
        }
    
        void InOrder_rec1(BinNode *p)   //xian序遍历
        {
    
            if(p)
            {
                cout<<p->data<<"  ";
                InOrder_rec1(p->lchild);
                InOrder_rec1(p->rchild);
            }
        }
        void InOrder_rec2(BinNode *p)   //中序遍历
        {
    
            if(p)
            {
                InOrder_rec2(p->lchild);
                cout<<p->data<<"  ";
                InOrder_rec2(p->rchild);
            }
        }
    
    
        void PostOrder_rec(BinNode *p)//后序遍历
        {
    
            if(p)
            {
                InOrder_rec2(p->lchild);
                InOrder_rec2(p->rchild);
                cout<<p->data<<"  ";
            }
        }
    };
    
    int main()
    {
        BinTree tree;
        BinNode *p=NULL;
        cout<<"输入数据(0代表空):";
        p=tree.Create_Tree(p);
    
        cout<<"先序遍历二叉树:";
        tree.InOrder_rec1(p);
        cout<<endl;
    
        cout<<"中序遍历二叉树:";
        tree.InOrder_rec2(p);
        cout<<endl;
    
        cout<<"后序遍历二叉树:";
        tree.PostOrder_rec(p);
        cout<<endl;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)