【二叉树的遍历】

#include <iostream>
using namespace std;

struct node
{
    char data;
    node *lc,*rc;
};

class BT
{
public:
    BT()
    {
        root=creat();
    }
    ~BT()
    {
        release(root);
    }
    void preorder()
    {
        preorder(root);
    }
    void inorder()
    {
        inorder(root);
    }
    void postorder()
    {
        postorder(root);
    }
    void levelorder();
private:
    node *creat();
    void release(node *bt);
    void preorder(node *bt);
    void inorder(node *bt);
    void postorder(node *bt);
    node *root;
};
void BT::preorder(node *bt)
{
    if(bt==NULL)
        return;
    else
    {
        cout<<bt->data;
        //cout<<bt->data<<" ";
        preorder(bt->lc);
        preorder(bt->rc);
    }
}
void BT::inorder(node *bt)
{
    if(bt==NULL)
        return ;
    else
    {
        inorder(bt->lc);
        cout<<bt->data;
        //cout<<bt->data<<" ";
        inorder(bt->rc);
    }
}
void BT::postorder(node *bt)
{
    if(bt==NULL)
        return ;
    else
    {
        postorder(bt->lc);
        postorder(bt->rc);
        cout<<bt->data;
        //cout<<bt->data<<" ";
    }
}
void BT::levelorder()
{
    node *Q[100],*q=NULL;
    int front =-1;
    int rear=-1;
    if(root==NULL)
        return ;
    Q[++rear]=root;
    while(front!=rear)
    {
        q=Q[++front];
        //cout<<q->data<<" ";
        cout<<q->data;
        if(q->lc!=NULL)
            Q[++rear]=q->lc;
        if(q->rc!=NULL)
            Q[++rear]=q->rc;
    }
}
node* BT::creat()
{
    node *bt;
    char ch;
    cin>>ch;
    if(ch=='#')
        bt=NULL;
    else
    {
        bt=new node;
        bt->data=ch;
        bt->lc=creat();
        bt->rc=creat();
    }
    return bt;
}

void BT::release(node *bt)
{
    if(bt==NULL)
        return ;
    else
    {
        release(bt->lc);
        release(bt->rc);
        delete bt;
    }
    //cout<<"OVER!"<<endl;
}

int main()
{
    char c='Y';
    while(c=='Y')
    {
        BT t;
        //cout<<"二叉树的前序遍历:"<<endl;
        t.preorder();
        cout<<endl;
        //cout<<endl<<"二叉树的中序遍历:"<<endl;
        t.inorder();
        cout<<endl;
        //cout<<endl<<"二叉树的后序遍历:"<<endl;
        t.postorder();
        cout<<endl;
        //cout<<endl<<"二叉树的层序遍历:"<<endl;
        //t.levelorder();
        //cout<<endl;
        cin>>c;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值