版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、成绩中南大学信息科学与工程学院数据结构实 验报 告实验名称:二叉树基本操作班 级学号:姓 名:实验题目实现二叉树的基本操作的代码实现二实验目的1、掌握二叉树的基本特性2、掌握二叉树的先序、中序、后序的递归遍历算法3、通过求二叉树的深度、度为2的结点数和叶子结点数等算法三实验要求认真阅读书上给出的算法编写程序并独立调试四、概要设计ADT Bin aryTree数据对象D: D是具有相同特性的数据元素的集合。数据关系R:/ 若 D=e,则 R=e,称 BinaryTree 为空二叉树;/若D#0,则R=H,H是如下二元关系;/ (1)在D中存在惟一的称为根的数据元素root,它在关系H下无前驱;/
2、 (2)若 D-rootM,则存在 D-root=D1,Dr,且 DICDr =0;/ (3)若D1M0,则D1中存在惟一的元素x1, vroot,x1wH,且存在D1上的关系H1匸H;若DrM0,则Dr中存在惟一的元素xr,vroot,xrwH,且存在上的关系Hr CH; H=vroot,x1,vroot,xr,H1,Hr;/ (4) (D1,H1)是一棵符合本定义的二叉树,称为根的左子树;(Dr,Hr)是一棵符合本定 义的二叉树,称为根的右子树。基本操作:CreateBiTree( &T, defi ni tion )/初始条件:definition给出二叉树T的定义。/操作结果:按def
3、initon构造二叉树T。BiTreeDepth( T )/初始条件:二叉树T存在。/操作结果:返回T的深度。PreOrderTraverse( T, visit()/初始条件:二叉树T存在,Visit是对结点操作的应用函数。/操作结果:先序遍历T,对每个结点调用函数Visit一次且仅一次。一旦visit()失败,则操 作失败。InO rderTraverse( T, visit()/初始条件:二叉树T存在,Visit是对结点操作的应用函数。/操作结果:中序遍历T,对每个结点调用函数Visit一次且仅一次。一旦visit()失败,则操 作失败。PostOrderTraverse( T, vis
4、it()/初始条件:二叉树T存在,Visit是对结点操作的应用函数。/操作结果:后序遍历T,对每个结点调用函数Visit一次且仅一次。一旦visit()失败,则操 作失败。LeafNodes(p)/初始条件:二叉树T存在。/操作结果:返回T的叶子结点数。BothNodes(p)初始条件:二叉树T存在。/操作结果:返回T的度为2的结点数。五、详细设计1、给出本数据的存储结构定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define NULL 0#define OVERFLOW -22、实现二叉树的抽象数据类型如下:typed
5、ef intStatus;typedef char TElemType;定义二叉树的数据元素类型为chr3、存储实现的抽象数据类型如下:BiTNode0120data;BiTNode0120BiTNode0120data;BiTNode0120BiTNode0120*lchild; /左孩子指针*rchild;右孩子指针TElemTypestructstruct BiTNode0120, *BiTree;4、运算的函数声明:Status CreateBiTree0120 (BiTree T, defi ni tion )/构建二叉树Status PreOrder0120 (BiTree p)/
6、先 序遍历Status In Order0120 (BiTree p)/中 序遍历Status PostOrder0120 (BiTree p)/后 序遍历Status BTNodeDepth0120 (BiTree p)/求 二叉树的深度Status LeafNodes0120 (BiTree p,i nt *i)/求 二叉树叶子结点的个数 void getDataFromFile0120(char fileName,BiTree & root);Status BothNodes0120 (BiTree p,int *i)/求度为 2 的结点数5、给出操作实现的伪码Status create
7、BiTree0120 (BiTree &root,char in ,i nt beg in 1,i nt en d1,char post, int beg in 2,i nt en d2)根据给定的中序序列in,后序序列post,构造二叉树root其中:beg ini, en di分别为叉树的中序序列在in冲的开始位置(序号,数组下标 +1)、结束位置;其中:begin2, end2分别为叉树的后序序列在post冲的开始位置(序号,数组下 标+1 )、结束位置;char r;int i;int mi;中序序列中,左子树根位置int m2;后序序列中,左子树最后一个结点位置if(begi n1-
8、e nd1!=begi n2-e nd2) return ERROR;if(e nd1-begi n1=0)root=(BiTree)malloc(sizeof(BiTNode);r=poste nd2;root-data=r; /根for(i=beg in 1;iv=e nd1;i+)if(i ni=r) break;m1=i-1;m2=beg in 2+i-beg in1-1;root-lchild=NULL; root-rchild=NULL;if(createBiTreeO12O(root-lchild ,in,begin1,m1,post,begin2,m2)=ERROR) 构造左子
9、树printf(初始化二叉树出错! nn请检查初始数据! nn”); if(createBiTreeO12O(root-rchild ,in,m1+2,end1,post,m2+1,end2-1)=ERR0R) 构造右子树printf(初始化二叉树出错! nn请检查初始数据! nn”);elseroot=NULL;return OK;void getDataFromFile0120 (char fileName,BiTree &root) 从文件fileName中读取数据构造二叉树rootFILE *fp;char inO rder0120 100;char postOrder0120 100
10、;int a1,a2,b1,b2;fp=fope n( fileName,r);fsca nf(fp,%sn,i nO rder0120);fsca nf(fp,%sn,postOrder0120);fclose(fp);a1=strle n( i nOrder0120:);中序序列第一个字符位置a2=strle n(inO rder0120)-1;中序序列最后一个字符位置b1=strle n( postOrder0120:); 后序序列第一个字符位置 b2=strle n( postOrder0120)-1;后序序列最后一个字符位置if(createBiTree0120 (root,i nO
11、rder0120,a1,a2,postOrder0120,b1,b2)=ERROR) printf(初始化二叉树出错! nn请检查初始数据! nn”);elseprintf(初始化二叉树成功!);Status PreOrder0120 (BiTree p) / 先序遍历二叉树if ( p!= NULL ) pri ntf(%c, p-data);Pre0rder0120 ( p-lchild );Pre0rder0120 ( p-rchild);return OK;Status InOrder0120 (BiTree p) / 中序遍历二叉树if( p!= NULL ) In Order012
12、0 ( p-lchild );pri ntf(%c, p-data);In Order0120 ( p-rchild);return OK;Status PostOrder0120 (BiTree p) / 后序遍历二叉树 if ( p!= NULL ) PostOrder0120 ( p-lchild );PostOrder0120 ( p-rchild);pri ntf(%c, p-data);return OK;Status BTNodeDepth0120 (BiTree p)求二叉树的深度in t lchilddep,rchilddep;if(p=NULL)return 0;elsel
13、childdep=BTNodeDepth0120 (p-lchild); rchilddep=BTNodeDepth0120 (p-rchild);retur n(lchilddeprchilddep)?(lchilddep+1):(rchilddep+1); return OK;Status LeafNodes0120 (BiTree p,i nt *i)求二叉树的叶子结点 int j;if(p!=NULL)if(p-lchild!=NULL|p-rchild!=NULL)j = *i;j+;*i = j;LeafNodes0120 (p-lchild,i);LeafNodes0120(p-
14、rchild,i); return OK;Status BothNodes0120 (BiTree p,int *i)求度为 2 的结点数 int j;if(p!=NULL) if(p-lchild!=NULL&p-rchild!=NULL) j=*i;j+; *i = j;BothNodes0120 (p-lchild,i);BothNodes0120(p-rchild,i); return OK;七、程序的运行测试及结果测试用例1:构造二叉树测试用例2:先序遍历测试用例3:中序遍历 TOC o 1-5 h z 枕退岀:+:*1 构造二叉树*2.先序遍历*相中序遍历*羁后续遍历*槪.叶子结点数*梱.深度*郴度为2的结点数*:|=|=4=|=4=|=4=|=|=|=|=4=|=4=|=4=|=|=|=|=4=|=4=|=4=|=|=|
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (三诊)成都市2023级高三下学期定时练习历史试卷(含答案)
- 华亭煤业集团有限责任公司新窑煤矿矿山地质环境保护与土地复垦方案
- 自驾游路线规划与车辆检查清单
- (正式版)T∕CCASC 0057.4-2025 离子膜法烧碱生产安全操作规程 第4部分:浓缩与固碱加工
- 2026西交康桥教育集团招聘笔试备考题库及答案解析
- 2026年河南省事业单位联考招聘工作人员13685名考试参考题库及答案解析
- 乐山市五通桥区紧密型城市医疗集团(医共体) 2026年编外招聘(8人)考试模拟试题及答案解析
- 海盐农商银行2026年专业化人才岗位常态化招聘进行时!笔试参考题库及答案解析
- 2026云南临沧耿马傣族佤族自治县人民医院招聘6人考试模拟试题及答案解析
- 2026浙江台州市椒江区财政局面向社会招聘1人考试模拟试题及答案解析
- QC成果QC成果点评集合
- 2023年国家电网公司电力安全工作规程(变电部分)2023年6月修订
- 毕业设计-某堆浸铀矿100tUa密实移动床离子交换工艺设计【完整版】
- 《笨狼的故事》读书会读书分享PPT课件(带内容)
- 食堂考核评分表
- 《昆虫记》阅读推荐PPT
- 讲课稿《苦难与辉煌》
- GB/T 20564.4-2022汽车用高强度冷连轧钢板及钢带第4部分:低合金高强度钢
- JB-T 10706-2022 机械密封用氟塑料全包覆橡胶O形圈
- GB/T 26218.2-2010污秽条件下使用的高压绝缘子的选择和尺寸确定第2部分:交流系统用瓷和玻璃绝缘子
- GB 13690-2009化学品分类和危险性公示通则
评论
0/150
提交评论