




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆交通大学信息科学与工程学院报告书专业:计算机科学与技术课程名称:数据结构题目:二叉树实验班级:设计者:完成时间:设计要求试实现一棵二叉树,二叉树的结点结构和存储结构由学生自行设计与完成,主要完成以下功能:1、二叉树的建立2、二叉树的各种遍历3、实现插入功能4、实现删除功能5、定位功能6、实现搜索功能7、统计叶结点数量和分支结点的数量8、计算二叉树的高度等实验完成后,将实验报告电子版和源代码提交。另将实验报告打印一份上交到软件中心实验室。实验报告的内容请参见实验报告模板文件。设计思路和主要步骤首先进行数据存储结构和相关类、结构的分析。本实验程序采用链式存储方式,定义类BtreeNode充当数据承载着,类Btree用于实现所有要求的操作,其中Btree类定义为BtreeNode类的友元类,使其可以方便的操作BtreeNode类的私有成员left和right。在Btre类中定义一个BtreNode类型的root指针,用于二叉树的根指针。将其设置为私有成员实现数据封装。设置一组操作函数,均为私有成员。具体函数如下:voidCreateBtree(char*a);//创建二叉树 voidtraverse(BtreeNod*&bt,intmark);//遍历二叉树 boolinsert(BtreeNod*&bt,chara);//插入数据 voiddel(BtreeNod*&bt,chara);//删除数据 intDepth(BtreeNod*&bt);//求深度 intCount(BtreeNod*&bt);//节点数 intleafCount(BtreeNod*&bt);//叶子数 voidprint(BtreeNod*&bt);//广义表形式输出 voidfind(BtreeNod*&bt,chara);//查找 voidClear(BtreeNod*&bt);//删除二叉树创建二叉树。二叉树的创建使用了广义表的形式创建,更具输入的广义表的形式来创建相应的二叉树,当然也可以采用前序法创建二叉树,二叉树已@作为结束标志符号,‘,’表示为空!遍历二叉树。二叉树的遍历共采用3中方式,前序遍历、中序遍历、后序遍历,其基本方法基本相同,均采用递归的方法。至于第四种方法,按层遍历,实质上也差不了多少,在本程序中未实现按层遍历。前序遍历的代码如下:if(mark==1)//根据mark的值确定以何种方式遍历,mark=1是前序遍历 { if(bt!=NULL) { cout<<bt->data<<""; traverse(bt->left,mark);//递归 traverse(bt->right,mark); } }插入功能。插入功能采用根据插入值的大小来决定插入的具体位置,比当前节点的值大,则向右子树方向递归,否则向左子树方向递归。大概代码如下: if(bt==NULL){bt=newBtreeNod;bt->left=NULL;bt->right=NULL;bt->data=a;returntrue;}elseif(bt->data==a){cout<<"插入"<<a<<"失败:元素已存在!"<<endl;returnfalse;}elseif(bt->data>a)returninsert(bt->left,a);elsereturninsert(bt->right,a);删除节点。节点的删除将会删除其下面的子节点。也是采用递归的方法实现。具体代码如下:if(bt==NULL){cout<<"没有要删除的元素!"<<endl;return;}elseif(bt!=NULL&&bt->data==a){BtreeNod*oldNode=bt;if(bt->left==NULL){if(bt->right==NULL){bt=NULL;oldNode=NULL;deletebt;deleteoldNode;}else{oldNode=NULL;bt=bt->right;bt->right=bt->right;deleteoldNode;}}elseif(bt->right==NULL){if(bt->left==NULL){bt=NULL;oldNode=NULL;deleteoldNode;deletebt;}else{oldNode=NULL;bt=bt->left;bt->left=bt->left;deleteoldNode;}}else{BtreeNod*newNode=bt;oldNode=NULL;bt=bt->left;bt->left=bt->left;bt->right=bt->right;if(newNode->right!=NULL)bt->right->right=newNode->right;deleteoldNode;}}elseif(bt->data>a)del(bt->left,a);elsedel(bt->right,a);搜索功能。由于本实验中二叉树的节点数据只有一个,故查找的意义不大,只是遍历的一种重复,如果所有的数据均按照大小排列,例如使用insert()函数插入的节点,其搜索当前节点与查询节点的大小比较,若比当前节点大则向其右子树继续搜索,反之则向左子树搜索。主要代码如下:if(bt==NULL){cout<<"数据"<<a<<"未找到"<<endl;}elseif(bt->data==a){cout<<"数据"<<a<<"已找到"<<endl;}elseif(bt->data>a)find(bt->left,a);else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省苏州吴中学区2024-2025学年初三下学期周末练习3生物试题含解析
- 山西机电职业技术学院《德国精神与文化》2023-2024学年第二学期期末试卷
- 宿州学院《生物资源保护与利用》2023-2024学年第二学期期末试卷
- 江苏省无锡市第一女子中学2025届高三下学期联合考试物理试题含解析
- 石家庄信息工程职业学院《地方教学名师课堂》2023-2024学年第二学期期末试卷
- 辽宁农业职业技术学院《数学方法论与解题研究》2023-2024学年第一学期期末试卷
- 莆田学院《土木工程施工技术课程设计》2023-2024学年第一学期期末试卷
- 天津外国语大学《病理形态学诊断技术》2023-2024学年第二学期期末试卷
- 山东省邹平市一中学2025届高三4月月考试生物试题含解析
- 公司股权转让居间协议书二零二五年
- 业务转让合同协议
- 销售差价提成管理制度
- 《东欧社会主义国家的改革与演变》社会主义国家的改革与演变化课件-2
- 2025-2030中国口服轮状病毒疫苗行业市场现状供需分析及投资评估规划分析研究报告
- 2025年郑州铁路职业技术学院单招职业倾向性测试题库必考题
- 2025年许昌职业技术学院单招职业技能测试题库及答案一套
- 2025年安阳职业技术学院高职单招语文2019-2024历年真题考点试卷含答案解析
- 2025陕西省建筑安全员-B证考试题库及答案
- 第四届“魅力之光”知识竞赛初赛题库
- 《旅行社经营与管理》电子教案 5-3 旅行社接待业务3
- 中央2024年国家药品监督管理局中国食品药品检定研究院招聘笔试历年参考题库真题考点解题思路附带答案详解
评论
0/150
提交评论