




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告课程名称数据结构与算法实验学期.2023年.春季学期所在学院交通科学与工程学院.所属专业.交通信息与控制工程系年级2023专业班级学生姓名―学号一指导教师.•一实验最终成绩实验报告(三)实验题目二叉树的基本操作及应用实验时间2023年6月10日实验地点B07-B214实验成绩实验性质口应用性□设计性□综合性教师评阅:□实验目的明确;口操作环节对的;口设计文稿(表格、程序、数据库、网页)符合规定;□保存途径对的;口实验结果对的;口实验分析总结全面;口实验报告规范;□评阅教师署名:一、实验目的1熟悉二叉树的存储结构和对二叉树的基本操作。2掌握对二叉树前序、中序、后序遍历操作的具体实现。3学习运用递归方法编写对二叉树这种递归数据结构进行解决的算法。4会应用二叉树的基本操作解决简朴的实际问题三、重要设计思想与算法(此处不够可加页,或在反面书写)该实验重要涉及一下几个函数,算法核心分别在各函数中。.建立树的结构。typedefstructBiTNode(dcharelcment;TreeIchi1d,rchi1d;};〃B数的基本结点输入ABD**CE**F***TreeCreateBTree(void)//可以返回一个Tree指针{TreepTree;*charva1;scanf("%c〃,&.val);叩rintfC%c”,val);oif(val=='*'Hval=二'…p')returnNULL;〃根据输入字符先序建树else〃*代表空0(个Tree=(Tree)malloc(sizeof(structBiTNode));if(pTree==NULL)(°printf("内存分派失败!”);。exit(-l);//防止程序不知道空间不够用了o}0pTree->e1ement=va1;Tree->lchild=CreateBTree();ooPTree->rchild=CreateBTreeO;〃递归,NLR地仓U建结点doreturnpTree;.数叶结点个数intCountLeaf(TreeT){dif(T==NULL)return0;df(!T->lchild&&!T->rchild)(-return1;//两个儿子都空则说明是叶子,返回1}eIse(®returnCountLeaf(T->1child)+CountLeaf(T->rchi1d);//数左右子树总共的叶结点)};.数树的深度intCountLevel(TreeT)(if(!T)return0;else(4ntLeft=CountLevel(T->1child);intRight=CountLevel(T->rchild);return1+(Left>Right?Left:Right);//三目运算取最大}};〃最后数得树的最深层数,也是递归typedefstruct{Treeelements[MAXSIZE];//注意这里放的是指针inttop;}Stack;//这是一个用于装Tree指针的栈.这是用非递归实现先序遍历的voidPreOrder(TreeT)(StackS;oTreep;oInitStack(&S);〃造一个栈待会儿用叩二T;〃用p指针来不断解决结点操作while(p||HsEmpty(S))(while(p)3{3oprintf("%c',P—>e1ement);〃只要不空则把p指的数据输出Push(&S,p);p=p->lchild;〃继续往左边找。)//一旦停下来说明找到了空结点,则开始往上一层的右边找一下if(!IsEmpty(S))。(〃栈非空s叩二Pop(&S);〃退栈,找到刚才说的上一层p=p—>rchild;〃找右边了3)。}//只要while还循环说明没有遍历完,现在再一次从刚才的右边执行先序遍历);四、实验结果(设计文档、文稿存放途径,可以截图描述实验结果)#inc1ude<stdio.h>#inelude"3.h"intmain(void)〃改主程序相应上图结果{0TreepTree;inti,j;®pTree=CreateBTree0;//创建二叉树pTree®i=CountLeaf(pTree);printf("Thereare与dleaves!",i):〃递归程序数叶节点«j=CountLevel(pTree);oprintf("Thereare%dlevels!”,j);//递归程序数层数°PreOrder(pTree);//按照前序遍历输出该书的元素return0;五、实验分析总结本次实验采用二叉树存储了一系列的字符串,通过函数TreeCreateBTree(v。id)得到一个根据输入创建的二叉树结构,时间复杂度是0(n);通过函数intCountLeaf(TreeT)递归返回叶子个数,时间复杂度0(n);通过intCountLevel(TreeT)返回最深途径得到树的深度,时间复杂度0(n);;最后用voidPreOrder(TreeT)实现非递归写法的二叉树先序遍历,时间复杂度为0(n).综上所述,由于都是要遍历B数的每个节点,所以程序执行的时间长度和输入的字符串长度n是线性增长的。他们的时间复杂度都是0(n).这次实验,我更深刻的理解了B数的基本性质如递归性,运用递归,我们可以很方便的写出各种对树的操作;熟悉了创建树,遍历树的基本方法;体会了算法的代码实现细节。最后,特别是在用非递归方法实现遍历的函数中,我更加深刻的理解到了数是如何遍历的,以及递归是不断调用自己的本质,并且不仅仅对BTree自身有运用,之前学习的栈也用于存储遍历的节点指针,所以数据结构的学习应当是一个融会贯通的过程,我在学习的过程中越来越有信心了。二、实验内容和规定(说明算法的时间复杂度)1基于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中级质量工程师综合知识精益企业模拟试题(附答案)
- 伦理委员会考核试题(附答案)
- 三级营销员模拟题库与答案
- 中外服装史知到智慧树答案
- 特殊药品培训试卷及答案
- 冷藏药品培训考试题及答案
- 2025年度房地产抵押贷款经纪服务协议
- 2025版土石方运输合同绿色运输能力评估合同
- 2025电梯保养服务与智能监控系统集成合同
- 2025版尿素原料采购及仓储物流服务合同
- 《液压与气动控制》课件
- 语言学概论-第三章-语义
- 2024-2025学年广东省深圳实验学校初中部九年级上学期开学考英语试题及答案
- 邮政快递员技能大赛理论考试题库(含答案)
- 《电动航空器电推进系统技术规范》
- 结肠造瘘还纳术手术配合
- 2024年山东省建筑施工企业主要负责人A类考试题库及答案(典型题)
- 特种设备目录新旧对照表
- 2024年初一英语阅读理解专项练习及答案
- 陪诊师与公司签订协议书范文
- 喀什德力克油田科技有限公司30万立方米-日油田伴生放空天然气回收利用项目
评论
0/150
提交评论