//要求:头文件一
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
struct BiTnode
{char data;
BiTnode *lchild,*rchild;
};
struct Queue
{BiTnode* *data0;
int max;
int front,rear,size;
};
void SetQueue(Queue *Q,int n)
{Q->data0=(BiTnode**)malloc(n*sizeof(BiTnode*));
if(Q->data0==NULL)
{cout<<"overfilow.";exit(1);
}
Q->max=n;Q->front=0;
Q->rear=0;Q->size=0;
}
void FreeQueue(Queue *Q)
{free(Q->data0);}
void QInsert(Queue *Q,BiTnode* item)
{if(Q->size==Q->max){cout<<"Queue is full."<<endl;exit(1);}
Q->data0[Q->rear]=item;
Q->rear=(Q->rear+1)%Q->max;
Q->size++;
}
BiTnode* QDelete(Queue *Q)
{BiTnode* item;
if(Q->size==0)
{cout<<"Deleting from an empty queue!"<<endl;exit(1);}
item=Q->data0 [Q->front];
Q->front=(Q->front+1)%Q->max;
Q->size--;
return item;
}
int QEmpty(Queue *Q)
{if(Q->size==0)return(1);return(0);
}
void CreateBitree(BiTnode *&T)
{char ch;
cin>>ch;
if(ch=='/')T=NULL;
else
{
if(!(T=(BiTnode*)malloc(sizeof(BiTnode))))
{cout<<"Allocation failed."<<endl;exit(1);}
T->data=ch;
CreateBitree(T->lchild);
CreateBitree(T->rchild);
}
}
void PreOrder(BiTnode*T)
{
if(T!=NULL)
{cout<<T->data<<"->";
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTnode*T)
{
if(T!=NULL)
{
InOrder(T->lchild);
cout<<T->data<<"->";
InOrder(T->rchild);
}
}
void PostOrder(BiTnode*T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<<T->data<<"->";
}
}
void LevelOrder(BiTnode *T)
{BiTnode *ptr;
Queue Q;
if(T==NULL)return;
SetQueue(&Q,50);
QInsert(&Q,T);
while(!QEmpty(&Q))
{ptr=QDelete(&Q);
cout<<ptr->data<<"->";
if(ptr->lchild!=NULL)
QInsert(&Q,ptr->lchild);
if(ptr->rchild!=NULL)
QInsert(&Q,ptr->rchild );
}
FreeQueue(&Q);
}
void BiTreeTraverse()
{
BiTnode * T;
char j;
int flag=1;
cout<<" ***************本程序实现二叉树遍历的操作*************** "<<endl;
cout<<endl;
cout<<"按先序遍历来构造二叉树:"<<endl;
printf("例如:a/b/c/d//(回车)\n"); CreateBitree(T); //初始化队列
while(flag)
{
cout<<endl;
cout <<" 请选择: "<<endl
<<" ┌──────────┐"<<endl
<<" │ 1.递归先序遍历 │"<<endl
<<" │ 2.递归中序遍历 │"<<endl
<<" │ 3.递归后序遍历 │"<<endl
<<" │ 4.非递归层序遍历 │"<<endl
<<" │ 0.退出程序 │"<<endl
<<" └──────────┘"<<endl;
cin>>j;
switch(j)
{
case '1':if(T)
{
cout<<"递归先序遍历二叉树:"<<endl;
PreOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
case '2':if(T)
{
cout<<"递归中序遍历二叉树:"<<endl;
InOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
case '3':if(T)
{
cout<<"递归后序遍历二叉树:"<<endl;
PostOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
case '4':if(T)
{
cout<<"非递归层序遍历二叉树:"<<endl;
LevelOrder(T);
cout<<endl;
}
else cout<<"二叉树为空!"<<endl;
break;
default:flag=0;cout<<"程序运行结束,按任意键退出!"<<endl;
}
}
}
//主函数
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
//#include<fstream.h>
void main ()
{
char j;
int flag=1;
cout<<"**************** 欢迎进入本系统***************"<<endl;
cout<<endl;
while(flag)
{
cout<<endl;
cout <<" 请按1回车开始: "<<endl
<<" ┌──────────┐"<<endl
<<" │ │"<<endl
<<" │ │"<<endl
<<" │ 1.二叉树遍历 │"<<endl
<<" │ │"<<endl
<<" │ │"<<endl
<<" └──────────┘"<<endl;
cin>>j;
switch(j)
{
// case '1':Monkeyking(); break;
case '1':BiTreeTraverse();break;
// case '3':wenzbianji();break;
default:flag=0;cout<<"程序系统就要退出了,按任意键退出!"<<endl;
}
}
}
applandtea
- 粉丝: 5
- 资源: 11
最新资源
- 处理定时器和消息的队列.7z
- 基于netty3.5的游戏服务器端框架 消息封装,编解码结构提供扩展,请求消息队列处理,基于protobuf的实例已经完成.7z
- 一个服务器处理框架,包括 协议处理,消息处理,持久层数据处理.7z
- matlab实现粒子群算法综合线阵低副瓣方向图设计-粒子群算法-天线阵列-PSO算法-matlab
- 动态规划算法详解及应用实例分析
- fscan一款内网资产排查工具提高工作效率
- 800高压脱泡机.STEP全套设计资料100%好用.zip
- 动态规划算法详解及Python代码实现
- 50kg双向单立柱堆垛机step全套设计资料100%好用.zip
- BBR12包装机卷包机热熔编带机sw12可编辑+cad全套设计资料100%好用.zip
- SQLAlchemy 基础用法完整示例
- X射线平板探测器架车step全套设计资料100%好用.zip
- TE-桁架机械手sw12全套设计资料100%好用.zip
- Z2021-4-顶升移栽机sw18可编辑全套设计资料100%好用.zip
- 2024注册测绘师《综合能力》讲义-第3章-工程测量(3)城乡规划与建筑工程测量.pdf
- 点胶贴合机step全套设计资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈