二叉树运算实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二
叉
树
基
本
运
算
班级:计科112
*****
学号:**********05辅导老师:***
二叉树的各种基本运算
一、实验目的
1、使学生熟练掌握二叉树的逻辑结构和存储结构。
2、熟练掌握二叉树的各种遍历算法。
二、实验内容
[问题描述]
建立一棵二叉树,试编程实现二叉树的如下基本操作:
1. 按先序序列构造一棵二叉链表表示的二叉树T;
2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,
分别输出结点的遍历序列;
3. 求二叉树的深度/结点数目/叶结点数目;(选做)
4. 将二叉树每个结点的左右子树交换位置。(选做)
[基本要求]
从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),
[测试数据]
如输入:ABCффDEфGффFффф(其中ф表示空格字符)则输出结果为
先序:ABCDEGF
中序:CBEGDFA
后序:CGEFDBA
层序:ABCDEFG
[选作内容]
采用非递归算法实现二叉树遍历。
三、实验步骤
1.程序源码
#include
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAX_TREE_SIZE 100
typedef TElem Type sqBiTree [MAX_TREE_SIZE ]; typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}biTNode,*BiTree;
int CreateBtree(BiTree &T)
{
char c;
cin>>c;
if(c==‘#’) T=NULL;
else{
T=new BiTNode
if(!T) exit(OVERFLOW);
T->data=c;
create_tree(T->lchild);
create_tree(T->rchild);
}
return ok;
int preOrder(BiTree T) 先序遍历
{
if(T!=NULL)
{ cout<
preOrder(T–>lchild);
preOrder(T–>rchild);
}
}
return ok;
}
int InOrder(BiTree T) 中序遍历
{
if(T!=NULL)
{ inOrder(T–>lchild);
cout<
inOrder(T–>rchild);
}
return ok;
}
int PostOrder(BiTree T) 后序遍历
{
if(T!=NULL)
{ PostOrder(T–>lchild);
PostOrder(T–>rchild);
cout<
}
return ok;
}
int LevOrder(BiTree T) //层次遍历二叉树{
bitree p;
if(T)
{
enqueue(T);
while(front!=rear)
{
p=delqueue();
printf("%3c",p->data);
if(p->lch!=NULL)enqueue(p->lch);
if(p->rch!=NULL)enqueue(p->rch);
}
}
}
int main()
{
BiTree T
createBtree(T)
int i,j;
while(1){
cout<<"输入:"< cout<<"输出结果为:"< cout<<“先序:”< cout<<“中序:”< cout<<“后序:”< cout<<“层序:”< } switch(j){ case1: CreateBtree(BiTree T);break; case2: PreOrder(BiTree T);break; case3: InOrder(BiTree T);break; case4: ostOrder(BiTree T);break; } } return 0; } 四、实验总结(结果分析和体会) 通过本次实验我对二叉树有了更深的了解,对二叉逻辑结构、存储结构和各种遍历算法等基本上掌握了。同时,通过自己数次的调试、修改也搞懂了许多以前比较模糊的知识点,比如这次的界面是复制过来的,其中很多语句经过同学的讲解都理解了。但这次实验也有很多不尽人意的地方,比如由于没有将头结点空置,使得很多操作都比较复杂;还有就是本次实验电子报告中我原来打算加上各函数的简单流程图,但是由于我处理图形方面还比较不熟练,画了三四个小时也不太满意,所以索性将几个小时的努力通过del键结束了,所以这次报告不太令人满意,我将在以后的报告中加上示意图,多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全,使程序更有实用价值,提高编程能力。