




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告实验报告(三)实验题目二叉树的基本操作及应用实验时间6月10日实验地点B07-B214实验成绩实验性质□应用性□设计性□综合性教师评阅:评阅教师签名:一、实验目的1熟悉二叉树的存储构造和对二叉树的基本操作。2掌握对二叉树前序、中序、后序遍历操作的具体实现。3学习运用递归办法编写对二叉树这种递归数据构造进行解决的算法。4会应用二叉树的基本操作解决简朴的实际问题二、实验内容和规定(阐明算法的时间复杂度)1基于二叉链表的存储格式,输入二叉树的先序序列,用*代表空节点,如ABD**CE**F**建立二叉树,然后中序遍历二叉树,输出节点的值。2针对建好的二叉树,编写递归程序,求树中叶子节点个数。3针对建好的二叉树,编写递归程序,求二叉树的高度。4针对建好的二叉树,试编写二叉树的前序非递归遍历算法。三、重要设计思想与算法(此处不够可加页,或在背面书写)该实验重要涉及一下几个函数,算法核心分别在各函数中。建立树的构造。typedef structBiTNode{ charelement; Treelchild,rchild;};//B数的基本结点输入ABD**CE**F***TreeCreateBTree(void)//能够返回一种Tree指针{ TreepTree; charval; scanf("%c",&val); printf("%c",val); if(val=='*'||val=='^p')returnNULL;//根据输入字符先序建树 else//*代表空 { pTree=(Tree)malloc(sizeof(structBiTNode)); if(pTree==NULL) { printf("内存分派失败!"); exit(-1);//避免程序不懂得空间不够用了 } pTree->element=val; pTree->lchild=CreateBTree(); pTree->rchild=CreateBTree();//递归,NLR地创立结点 } returnpTree;};数叶结点个数intCountLeaf(TreeT){ if(T==NULL)return0; if(!T->lchild&&!T->rchild) { return1;//两个儿子都空则阐明是叶子,返回1 } else { returnCountLeaf(T->lchild)+CountLeaf(T->rchild);//数左右子树总共的叶结点 } };3.数树的深度intCountLevel(TreeT){ if(!T)return0; else { intLeft=CountLevel(T->lchild);intRight=CountLevel(T->rchild); return1+(Left>Right?Left:Right);//三目运算取最大 }};//最后数得树的最深层数,也是递归typedefstruct{ Treeelements[MAXSIZE];//注意这里放的是指针 inttop;}Stack;//这是一种用于装Tree指针的栈4.这是用非递归实现先序遍历的voidPreOrder(TreeT){StackS; Treep; InitStack(&S);//造一种栈待会儿用 p=T;//用p指针来不停解决结点操作while(p||!IsEmpty(S)) {while(p) { printf("%c",p->element);//只要不空则把p指的数据输出 Push(&S,p);p=p->lchild;//继续往左边找 }//一旦停下来阐明找到了空结点,则开始往上一层的右边找一下 if(!IsEmpty(S)) {//栈非空 p=Pop(&S);//退栈,找到刚刚说的上一层 p=p->rchild;//找右边了 } }//只要while还循环阐明没有遍历完,现在再一次从刚刚的右边执行先序遍历};四、实验成果(设计文档、文稿寄存途径,能够截图描述实验成果)#include<stdio.h>#include"3.h"intmain(void)//改主程序对应上图成果{ TreepTree; inti,j; pTree=CreateBTree();//创立二叉树pTree i=CountLeaf(pTree); printf("Thereare%dleaves!",i);//递归程序数叶节点 j=CountLevel(pTree); printf("Thereare%dlevels!",j);//递归程序数层数 PreOrder(pTree);//按照前序遍历输出该书的元素 return0;}五、实验分析总结本次实验采用二叉树存储了一系列的字符串,通过函数TreeCreateBTree(void)得到一种根据输入创立的二叉树构造,时间复杂度是O(n);通过函数intCountLeaf(TreeT)递归返回叶子个数,时间复杂度O(n);通过intCountLevel(TreeT)返回最深途径得到树的深度,时间复杂度O(n);;最后用voidPreOrder(TreeT)实现非递归写法的二叉树先序遍历,时间复杂度为O(n).总而言之,由于都是要遍历B数的每个节点,因此程序执行的时间长度和输入的字符串长度n是线性增加的。他们的时间复杂度都是O(n).这次实验,我更深刻的理解了B数的基本性质如递归性,运用递归,我们能够很方便的写出多个对树的操作;熟悉了创立树,遍历树的基本办法;体会了算法的代码实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东南方职业学院《高尔夫技术实践》2023-2024学年第一学期期末试卷
- 农产品加工业项目风险分析和评估报告
- 广东司法警官职业学院《中医全科医学概论(含整合医学概论)》2023-2024学年第二学期期末试卷
- 抚顺师范高等专科学校《小球类(乒乓球)》2023-2024学年第二学期期末试卷
- 北京邮电大学《快题专题训练》2023-2024学年第二学期期末试卷
- 广东省深圳实验校2025届初三下期第一次月考物理试题试卷含解析
- 泉州工程职业技术学院《建筑结构试验》2023-2024学年第二学期期末试卷
- 北京市海淀区2024-2025 学年第二学期期中练习(一模)数学试题(含答案)
- 2025年加工承揽合同范本示例
- 2025网站开发合同书范本
- 2024年全国“纪检监察”业务相关知识考试题库(附含答案)
- 手术分级目录(2023年修订)
- 2023高中学业水平合格性考试历史重点知识点归纳总结(复习必背)
- 导游人员管理法律制度课件
- 2022年江苏安东控股集团有限公司招聘笔试题库及答案解析
- 美国地图高清中文版
- 金属监督监理实施细则
- 正确认识汽车太阳膜课件
- 工程建筑给排水外文文献翻译1
- 曲线上梁的平分中矢坐标计算方法解读
- DB4201∕T 646-2021 轨道交通工程运营期结构监测技术规程
评论
0/150
提交评论