数据结构二叉树综合试验报告_第1页
数据结构二叉树综合试验报告_第2页
数据结构二叉树综合试验报告_第3页
数据结构二叉树综合试验报告_第4页
数据结构二叉树综合试验报告_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机科学与工程学院数据结构实验报告2专业班级智能01实验地点机电大楼4楼419机房学生学号指导教师学生姓名实验时间第12周第14周星期2实验项目树性结构的综合使用实验类别操作性()验证性()设计性()综合性(力其它()实验目的及要求1 .实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。2 .求一叉树的结点个数,叶子结点个数,二叉树的局度,度为2的结点个数。成绩评定表类别评分标准分值得分合计上机表现积极出勤、遵守纪律认真完成设计任务30分报告质量操作规范、功能止确填写完整、体现收获70分说明:评阅教师:日期:_20年g日实验内容一.实验内容1 .实现二叉树的先序,中序与后序遍历的递归算

2、法与非递归算法。2 .求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。二.程序的设计思想1实现二叉树的先序,中序与后序遍历的递归算法与非递归算法。先构造二叉树,根据先序遍历的思想,输入根后,再输入左子树,直至左子树为空则输入上一层右字树。(1)二叉树的非递归遍历是用显示栈来存储二叉树的结点指针,先序遍历时,按二叉树前序遍历的顺序访问结点,并将结点的指针入栈,直到栈顶指针指向结点的左指针域为空时取出栈顶指针并删除栈顶指针,访问刚取出的指针指向的结点的右指针指向的结点并将其指针入栈,如此反复执行则为非递归操作。(2)二叉树的递归遍历:若二叉树为空,则空操作先序遍历:(a)访问根结

3、点;(b)先序遍历左子树;(c)先序遍历右子树。中序遍历:(a)中序遍历左子树;(b)访问根结点;(c)中序遍历右子树后序遍历:(a)后序遍历左子树;(b)后序遍历右子树;(c)访问根结点。3 .求二叉树的结点个数,叶子结点个数,二叉树的高度,度为2的结点个数。(1)求二叉树的叶子结点个数:先分别求得左右子树中个叶子结点的个数,再计算出两者之和即为二叉树的叶子结点数。(2)二叉树的结点个数之和:先分别求得左子树右子树中结点之和,再计算两者之和即为所求。(3)二叉树的高度:首先判断二叉树是否为空,若为空则此二叉树高度为0,。否则,就先分别求出左右子树的深度进行比较,取较大的树加一即为所求。(4)

4、二叉树的度为2的结点个数:计算有左右孩子的结点个数,即为度为2的结点个实验内容数。三.编程过程中遇到的问题及解决办法(1)后续遍历的非递归函数涉及到回溯的方法,开始设计的方案想的太过于简单,所以形成了死循环,总是在最后的节点处不停地循环,后改成回溯后,该问题得到解决。(2)计算二叉树中度为2的结点个数中,返回循环的时候不论根结点有没有左右子树,但个人设计时,根总是会将自己默认为有左右子树,自行增加1.后在同学帮助下才看到自己的这个失误。4 .程序的闪光点(自我评价)1 .程序模块化,各个函数分开描述,方便观察2 .关键处有注释3 .建立二叉树时,用先序提示输入,比较人性化。5 .程序源代码(以

5、文件为单位提供)#include<iostream.h>#include<malloc.h>#defineMaxsize100typedefstructTREEstructTREE*lTree;structTREE*rTree;chardata;Tree;voidInitTree(Tree*);/初始化树voidCreatTree(Tree*);/创建二叉树voidPreTraverse(Tree*);/先序遍历递归voidPreOrderTraverse(Tree*);/先序遍历非递归voidInTraverse(Tree*tree);/中序遍历递归voidInOrd

6、erTraverse(Tree*tree);/中序遍历非递归voidPostTraverse(Tree*tree);/后序遍历递归voidLastOrderTraverse(Tree*tree);/后序遍历非递归intDepthTree(Tree*tree);/计算树的深度intLeafsTree(Tree*tree);/计算叶子结点个数intNodesTree(Tree*tree);/计算结点个数intTwochild(Tree*tree);/计算度为二的结点个数voidmain()intH,L;Treetree;/Treem;InitTree(&tree);CreatTree(&a

7、mp;tree);cout<<"先序遍历递归为:";PreTraverse(&tree);/先序遍历递归cout<<"先序遍历非递归:";PreOrderTraverse(&tree);/先序遍历非递归cout<<endl;cout<<"中序遍历递归为:";InTraverse(&tree);/中序遍历递归cout<<"中序遍历非递归:";InOrderTraverse(&tree);/中序遍历非递归cout<<

8、endl;cout<<"后序遍历递归为:”;PostTraverse(&tree);/后序遍历递归cout<<"后序遍历非递归:";LastOrderTraverse(&tree);/后序遍历非递归cout<<endl;cout<<"树的深度为:";H=DepthTree(&tree);cout<<H<<endl;cout<<"叶子结点个数:";L=LeafsTree(&tree);cout<<L&

9、lt;<endl;cout<<"结点个数:"cout<<NodesTree(&tree)<<endl;cout<<"度为二的结点个数"L=Twochild(&tree);cout<<L<<endl;voidInitTree(Tree*tree)/初始化树tree->lTree=NULL;tree->rTree=NULL;tree->data='0'voidCreatTree(Tree*tree)/创建树intn=0,m=0,i=

10、0;if(tree->data='0')cout<<"请输入该节点的数据:"cin>>tree->data;1:有):cout<<"节点"<<tree->data<<"是否有左子树(0:没有cin>>n;if(n=1)Tree*lTree=(Tree*)malloc(sizeof(Tree);tree->lTree=lTree;lTree->lTree=NULL;lTree->rTree=NULL;lTree->da

11、ta='0'CreatTree(tree->lTree);cout<<"节点"<<tree->data<<"是否有右子树(0:没有cin>>i;if(i=0);elseif(i=1)Tree*rTree=(Tree*)malloc(sizeof(Tree);tree->rTree=rTree;rTree->lTree=NULL;rTree->rTree=NULL;rTree->data='0'CreatTree(tree->rTree);els

12、eif(n=0)cout<<"节点"<<tree->data<<"是否有右子树(0:没有cin>>m;if(m=0);elseif(m=1)Tree*rTree=(Tree*)malloc(sizeof(Tree);tree->rTree=rTree;rTree->lTree=NULL;1:有):"1:有):"rTree->rTree=NULL;rTree->data='0'CreatTree(tree->rTree);)voidPreTrave

13、rse(Tree*tree)先序遍历递归(if(tree!=NULL)(cout<<tree->data<<""if(tree->lTree!=NULL)(PreTraverse(tree->lTree);PreTraverse(tree->rTree);)elseif(tree->rTree!=NULL)(PreTraverse(tree->rTree);)else;)voidPreOrderTraverse(Tree*tree)/先序遍历非递归(Tree*S80=NULL;inttop=0;while(tree

14、!=NULL)|(top)if(tree!=NULL)(cout<<tree->data<<""top+;Stop=tree;tree=tree->lTree;else(tree=Stop;top-;tree=tree->rTree;voidInTraverse(Tree*tree)中序遍历递归(if(tree!=NULL)(if(tree->lTree!=NULL)(InTraverse(tree->lTree);cout<<tree->data<<""InTraver

15、se(tree->rTree);elseif(tree->rTree!=NULL)(cout<<tree->data<<""InTraverse(tree->rTree);)elsecout<<tree->data<<"")voidInOrderTraverse(Tree*tree)/中序遍历非递归(Tree*D80=NULL;inttop=0;while(tree!=NULL)|(top)if(tree!=NULL)top+;Dtop=tree;tree=tree->l

16、Tree;elsetree=Dtop;top-;cout<<tree->data<<""tree=tree->rTree;voidPostTraverse(Tree*tree)/后序遍历递归if(tree!=NULL)(if(tree->lTree!=NULL)(PostTraverse(tree->lTree);PostTraverse(tree->rTree);cout<<tree->data<<"")elseif(tree->rTree!=NULL)(Post

17、Traverse(tree->rTree);cout<<tree->data<<"")elsecout<<tree->data<<"")voidLastOrderTraverse(Tree*tree)后序遍历非递归(Tree*stackMaxsize=NULL,*p;p=tree;inttop=0,tag=1,i=0,k=0;while(p!=NULL|top)i=1;while(p!=NULL)stack+top=p;p=p->lTree;if(top!=0)p=stacktop-

18、>rTree;if(p=NULL)(cout<<stacktop->data<<""if(stacktop!=NULL)(while(i)(if(stacktop!=NULL)(if(stacktop->rTree!=NULL)(if(stacktop->rTree->data=stacktop+1->data)cout<<stacktop->data<<""elsei=0;elsei=0;elsei=0;if(top!=0)p=stacktop->rTree;elsep=NULL;)intDepthTree(Tree*tree)/深度函数(intu,v;if(tree=NULL)return0;u=DepthTree(tree->lTree);v=DepthTree(tree->rTree);if(u>v)return(u+1);return(v+1);)intLeafsTree(Tree*tree)/子叶个数函数(intnum1,num2;if(tree=NULL)return0;elseif(tree-&g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论