二叉树的前中后层序遍历

#include <bits/stdc++.h>
using namespace std;

typedef struct BiNode///定义一个树类型
{
    int data;
    struct BiNode *Lchild,*Rchild;
}BiNode,*BiTree;

typedef struct Squeue///定义一个循环队列
{
    BiTree data[100];
    int frot;
    int rear;
}Squeue;

void CreaTree(BiTree &bt)///创建一棵树!&!,没有&,就传不出去,树就创建失败了
{
    int a;
    cin>>a;
    if(a==0)///说明是叶子节点
    {
        bt=NULL;
    }
    else
    {
        bt=new BiNode;///不是叶子节点就给该新增节点开辟内存
        bt->data=a;
        CreaTree(bt->Lchild);
        CreaTree(bt->Rchild);
    }

}
void PreOrder(BiTree bt)
{
    if(bt)
    {

        cout<<bt->data;
        PreOrder(bt->Lchild);
        PreOrder(bt->Rchild);
    }
}

void InOrder(BiTree bt)
{
    if(bt)
    {
        InOrder(bt->Lchild);
        cout<<bt->data;
        InOrder(bt->Rchild);
    }

}

void PostOrder(BiTree bt)
{
    if(bt)
    {
        PostOrder(bt->Lchild);
        PostOrder(bt->Rchild);
        cout<<bt->data;
    }

}

void LevelOrder(BiTree bt)///层序遍历
{
    Squeue l,*p;
    p=&l;
    p->frot=p->rear=0;

    if(bt)
    {
        cout<<bt->data;
        p->data[p->rear]=bt;
        p->rear=(p->rear+1)%100;
        while(p->frot!=p->rear)
        {
            bt=p->data[p->frot];
            p->frot=(p->frot+1)%100;
            if(bt->Lchild)
            {
                cout<<bt->Lchild->data;
                p->data[p->rear]=bt->Lchild;
                p->rear=(p->rear+1)%100;
            }
            if(bt->Rchild)
            {
                cout<<bt->Rchild->data;
                p->data[p->rear]=bt->Rchild;
                p->rear=(p->rear+1)%100;
            }
        }
    }
}

int main()
{
    BiTree bt=NULL;
    CreaTree(bt);
    cout<<endl<<"前序遍历"<<endl;
    PreOrder(bt);
    cout<<endl<<"中序遍历"<<endl;
    InOrder(bt);
    cout<<endl<<"后序遍历"<<endl;
    PostOrder(bt);
    cout<<"层序遍历"<<endl;
    LevelOrder(bt);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值