ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:54.94KB ,
资源ID:9971290      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9971290.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二叉树数据结构课程设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二叉树数据结构课程设计报告.docx

1、二叉树数据结构课程设计报告武汉纺织大学数学与计算机学院数据结构课程设计报告二叉树的编码学生姓名:学号:班级:指导老师:报告日期:年月日1 题目与要求1.1问题提出其中,x,y是两个整数坐标,采用由上至下和从左到右的方法对这些坐标进行赋值;size表示结点所有子孙结点的个数;depth表示结点的层次。如下图所示:要求利用所学的知识编写代码创建二叉树,求x,y,size,depth的值,并完成相应的操作,掌握二叉树的基本知识!1.2 本系统涉及的知识点涉及的相关知识点:1.二叉树的先序建立2.递归算法3.队列4.逆中序输出结点5.二叉树的遍历6.凹入法1.3 功能要求实现的主要功能:根据课本“算法

2、6.4”建立上图所示的二叉树,并且对每个结点的(x,y,size,depth)都赋零值,即(0,0,0,0)。编写算法求每个结点的(x,y)。编写算法求每个结点的size。编写算法求每个结点的depth。求二叉树中分支结点和叶子结点的数目。二叉树的繁茂度定义为各层结点数的最大值与树的深度的乘积,求二叉树的繁茂度。编写算法判别给定二叉树是否为完全二叉树。按中序凹入法显示二叉树。对二叉树进行层序遍历。销毁二叉树中的所有结点,要求在销毁每一个结点前,输出该结点的数据域。2 功能设计2.1 数据结构定义二叉树的二叉链表存储表示如下:typedefstructBiNode char data; int

3、x, y, size, depth; structBiNode *lchild, *rchild;BiNode, *BiTree;2.2 模块图3 程序代码设计#include stdio.h#include stdlib.htypedefstructBiNode char data; intx,y,size,depth; structBiNode *lchild,*rchild;BiNode,*BiTree;int max,max1,max2;BiTreecreat(BiTree T) char c; scanf(%c,&c); if(c=#) T=NULL; else T=(BiTree)

4、malloc(sizeof(BiNode); T-data=c; T-x=0; T-y=0; T-size=0; T-depth=0; printf(n请输入%c结点的左子结点:,T-data); fflush(stdin); T-lchild=creat(T-lchild); printf(n请输入%c结点的右子结点:,T-data); fflush(stdin); T-rchild=creat(T-rchild); return T;void degree(BiTree T)/求二叉树的各层结点树的最大值 BiTreeTree30; int n=1,i=0,flag; if(T-y=0)

5、Treei=T; Treei-x=n; Treei-depth=i+1; max=Treei-depth; i+;n+; while(i=1) flag=0; while(Treei-1-lchild!=NULL) Treei=Treei-1-lchild; if(Treei-y=0) Treei-x=n; Treei-depth=i+1; max=maxTreei-depth?max:Treei-depth; i+; n+; else break; if(Treei-1-rchild!=NULL) Treei=Treei-1-rchild; if(Treei-y=0) Treei-x=n;

6、Treei-depth=i+1; max=maxTreei-depth?max:Treei-depth; n+; i+; flag=1; if(flag=0) Treei-1-y=n; n+; i-; void xy(BiTree T)/求结点的(x,y) if(T!=NULL) printf(tt%c,T-data); T-size=(T-y-1-T-x)/2; printf(%d,%d)n,T-x,T-y); xy(T-lchild); xy(T-rchild); void size(BiTree T)/求结点的size if(T!=NULL) printf(tt%c,T-data); T

7、-size=(T-y-1-T-x)/2; printf(的size为:%dn,T-size); size(T-lchild); size(T-rchild); void Nodedepth(BiTree T)/计算结点的depth if(T!=NULL) printf(tt%c,T-data); T-size=(T-y-1-T-x)/2; printf(的depth为:%dn,T-depth); Nodedepth(T-lchild); Nodedepth(T-rchild); void PrintTree(BiTree&T,int Layer)/凹入法打印。按竖向树状打印的二叉树,layer

8、为结点层次inti=0;if(T) PrintTree(T-rchild,Layer+1); /处理右孩子 /从此开始处理根for(;idata); /按逆中序输出结点,用层深决定结点的左右位置 /处理根结束PrintTree(T-lchild,Layer+1); /处理左孩子 void LevelTraverse(BiTree&T)/按层遍历 int front=0,rear=0; BiTreeQueue20; BiTree p;/表示队头指针和队尾指针 printf(二叉树的层次遍历为:);if(T) p=T; /根指针入队Queuerear=p; rear=(rear+1)%20; /队

9、尾指针加一对20取余,可实现循环队列,合理利用空间while(front!=rear) /队不空 p=Queuefront; /出队,将值赋给pprintf(%c ,p-data);front=(front+1)%20; if(p-lchild) /如果p有左子树,将左子树入队 Queuerear=p-lchild;rear=(rear+1)%20; if(p-rchild) /如果p有右子树,将右子树入队 Queuerear=p-rchild;rear=(rear+1)%20; printf(n);void JudgeandCount(BiTree T)/求结点数,并判断是否为完全二叉树 B

10、iTreeTree30,Tree130; inti=0,j=1,n=0,key,k,sum=1,k0,flag=1,k1,sum0=0,k2; max1=1; Treei=T; if(Treei-size=0) T-size=(T-y-1-T-x)/2; k=Treei-size+1; while(j=max) if(j=max-1) for(k0=1;k0=j;k0+) sum*=2; sum-; sum0+; if(sum=sum0) key=k-sum; k2=i; if(key%2=0) k0=key/2; for(k1=0;k1lchild=NULL|Treek2-rchild=NU

11、LL) flag=0; break; k2-; else k0=key/2+1; for(k1=0;k1lchild=NULL|Treek2-rchild=NULL) flag=0; break; if(flag=1)&(Treek2-k0+1-lchild=NULL) flag=0; else flag=0; while(i=0) if(Treei-lchild!=NULL) Tree1n=Treei-lchild; n+; if(Treei-rchild!=NULL) Tree1n=Treei-rchild; n+; if(Treei-lchild=NULL)&(Treei-rchild=

12、NULL) max2+; i-; i=0; sum0+=n; max1=max1n?max1:n; n-; while(n=0) Treei=Tree1n; n-; i+; n=0; j+; i-; printf(nt该二叉树繁茂度为%dn,max*max1); if(flag=1) printf(t该二叉树为完全二叉树n); else printf(t该二叉树为非完全二叉树n); printf(t该二叉树的叶子节点有%d个n,max2); printf(t该二叉树的分支节点有%d个n,k-max2); void destroy(BiTree T)/销毁二叉树 if(T!=NULL) dest

13、roy(T-lchild); destroy(T-rchild); printf(tt%c,T-data); printf(%d,%d,%d,%d)n,T-x,T-y,T-size,T-depth); free(T); void main() BiTree T; T=NULL; inti,j=1;do printf(*菜单*n);printf(ttt1.创建二叉树n);printf(ttt2.求每个结点的(x,y)n);printf(ttt3.求每个结点的sizen);printf(ttt4.求每个结点的depthn);printf(ttt5.求分支结点和叶子结点、繁茂度、判别完全二叉树n);

14、printf(ttt6.按中序凹入法显示二叉树n);printf(ttt7.对二叉树进行层序遍历n); printf(ttt8.销毁二叉树中的所有结点n); printf(ttt9.退出程序nn);printf(*n); printf(请输入您的选择(1-9):n); scanf(%d,&i); switch(i) case 1: printf(请输入结点data域,输入#代表结束n); getchar(); T=creat(T); printf(ttt创建成功!n); break; case 2: degree(T);putchar(n);xy(T);break; case 3: degre

15、e(T);putchar(n);size(T);break; case 4: degree(T);putchar(n);Nodedepth(T);break; case 5: if(max=0) degree(T);JudgeandCount(T);break; case 6: putchar(n);PrintTree(T,1); break; case 7: putchar(n);LevelTraverse(T);break; case 8: degree(T);putchar(n);destroy(T);printf(ttt各结点已销毁!n);break; case 9: printf(t

16、tt谢谢使用!Thank you!n);exit(0);break; default: printf(Error!n); while(i=1&i=9);4 课程设计总结在此次的课程设计中,由于经验的缺乏以及粗心大意,在程序设计中犯了许多错误,但是经过一番思考并且在同学的帮助下,找到了导致程序错误的原因,经过多次修改和调试,程序终于能正常运行,而且能够完成课程设计任务中的大部分功能,同时在此次的课程设计中我又学到了许多知识,对计算机科学的兴趣又多了一分,但我现在掌握的可能只是计算机科学的皮毛,所以我会继续努力,刻苦钻研,希望在计算机方面有更高的成绩,对计算机科学有更深的研究!同时也感谢老师给我们这次课程设计的机会,让我们学有所用,并且认识我们自身的不足,让我们能不断完善自己!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1