//要求:头文件一
#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;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
题目是这样的:建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)任务:要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数。源代码都在里面,.CPP .dsw等<br> 遍历方法用了很多种不要的话可以删除。这是课程设计的程序 如果有问题或联系本人请到http://it.dengchao.org留言。很高兴能与大家交流技术!
资源推荐
资源详情
资源评论
收起资源包目录
二叉树遍历.rar (13个子文件)
二叉树遍历
新建 文本文档.opt 48KB
新建 文本文档.dsp 3KB
Debug
新建 文本文档.exe 212KB
vc60.pdb 132KB
vc60.idb 81KB
新建 文本文档.pdb 1.04MB
新建 文本文档.ilk 299KB
新建 文本文档.obj 22KB
新建 文本文档.pch 239KB
新建 文本文档.plg 260B
新建 文本文档.dsw 551B
新建 文本文档.ncb 49KB
新建 文本文档.cpp 4KB
共 13 条
- 1
资源评论
- fbimity2014-01-02十分给力啊,数据结构课程设计妥妥的
- qq882742582013-12-30谢谢 有用 收了
- oukaizhou2015-11-05就是要找这资料,太感谢了
- batman58082013-12-07很有用 值得下载
applandtea
- 粉丝: 5
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功