#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;
}
二叉树的前中后层序遍历
于 2023-04-10 18:31:00 首次发布