小刘忙啊 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 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题