版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆大学城市科技学院课程设计报告 二叉树的基本操作 学 院: 电气信息学院 专 业: 软件工程 年 级: 2011 姓 名: 班 级: 01 学 号: 20110286 成 绩: 完成时间: 2013年1月2日 指导教师: 目录一、需求分析3二、概要设计3三、详细设计4四、调试结果11五、课程设计总结11一、需求分析二叉树形象地说即树中每个节点最多只有两个分支,它是一种重要的数据类型。可以运用于建立家谱,公司所有的员工的职位图,以及各种事物的分类和各种机构的职位图表等。二叉树是通过建立一个链式存储结构,达到能够实现前序遍历,中序遍历,后序遍历。以及能够从输入的数据中得知二叉树的叶子结点的个数,
2、二叉树的深度。在此,二叉树的每一个结点中必须包括:值域,左指针域,右指针域。演示程序以用户与计算机对话的方式进行,即在计算机终端上显示提示信息后,由用户在键盘上输入相应动作的序号和相应的输入数据。1.1课程设计任务及要求(1)按先序次序输入二叉树中结点的值,构造二叉链表表示的二叉树t;(2)对二叉树t作先序、中序、后序遍历的递归算法,输出结果;(3)计算二叉树t的深度,输出结果;(4)计算二叉树t的叶子结点个数1.2课程设计思想本次课程设计中,用到的主要知识就是递归思想,着重体会递归的思想。建立二叉树采用先序次序插入的方式。对二叉树进行遍历时采用递归函数的方式。求二叉树的深度及叶子结点个数均采
3、用递归方式。 二、概要设计2.1对程序中定义的核心数据结构及对其说明:typedef struct BiTNode char data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;在开头定义了二叉树的链式存储结构,此处采用了每个结点中设置三个域, 即值域,左指针域和右指针域。2.2 程序模块及其功能:本程序分为:7大模块。二叉树的建立链式存储结构、前序遍历、中序遍历、后序遍历、求叶子结点的个数计算、中序遍历、后序遍历、深度、主函数。1、二叉树的建立链式存储结构;首先typedef struct BiTNode:定义二叉树的链式存储结构,此处采
4、用了每个结点中设置三个域,data:即值域,*lchild:左指针域和rchild:右指针域。2、二叉树的前序遍历;利用二叉链表作为存储结构的前序遍历:先访问根结点,再依次访问左右子树。3、二叉树的中序遍历;利用二叉链表作为存储结构的中序遍历:先访问左子数,再访问根结点,最后访问右子树。4、二叉树的后序遍历;利用二叉链表作为存储结构的前序遍历:先访问左右子树,再访问根结点。5、求二叉树的深度:首先判断二叉树是否为空,若为空则此二叉树的深度为0。否则,就先别求出左右子树的深度并进行比较,取较大的+1就为二叉树的深度。6、二叉树的求叶子结点的个数计算;先分别求得左右子树中各叶子结点个数,再计算出两
5、者之和即为二叉树的叶子结点数。7、主函数。主函数中分别调用各函数。三、详细设计3.1存储结构的建立由递归函数实现具体函数为:typedef struct bitnode telemtype data; struct bitnode *lchild,*rchild;bitnode ,*bitree;bitree createbitree(bitree t)char ch;scanf(%c,&ch);if(ch=#) t=NULL;elseif(!(t=(bitnode *)malloc(sizeof(bitnode) exit(overflow);t-data=ch;t-lchild=creat
6、ebitree(t-lchild);t-rchild=createbitree(t-rchild);return t;在创建的二叉树中,左右孩子都为字符型。char的作用是输入n个任意的字符,而且在输入n个字符后,必须输入n+1个0,才能得到本程序所有能够实现的功能。t=Null是将二叉树置空。if(!(t=(bitnode *)malloc(sizeof(bitnode),采用动态申请新结点的方式,不仅实现起来方便,而且还节省大量的存储空间。t-data=ch;值域t-lchild=createbitree(t-lchild);t-rchild=createbitree(t-rchild);
7、将二叉树中的每一个结点设置为:值域,左指针域,右指针。这一小段程序实现了二叉树的置空,二叉树的建立,二叉树的存储。3.2前序遍历:先访问根结点,再访问左子树,最后访问右子树。具体函数为:void preordertraverse(bitree t)if(t)printf(%c,t-data);preordertraverse(t-lchild);preordertraverse(t-rchild);3.3中序遍历:先访问左子树,再访问根结点,最后访问右子树。具体函数为:void inordertraverse(bitree t) if (t) inordertraverse(t-lchild)
8、;printf(%c,t-data);inordertraverse(t-rchild); 3.4后序遍历:先访问左子树,再访问右子树,最后访问根结点。具体函数为:void postordertraverse(bitree t) if(t)postordertraverse(t-lchild);postordertraverse(t-rchild);printf(%c,t-data); 3.5求二叉树的深度:先定义三个整形变量m,n.如果树为空,则height=0;否则,先分别访问出左右子树的深度,再进行比较,将较大的+1的结果就是所求二叉树的深度。具体函数为:int height(bitre
9、e t)int m,n;if(t=NULL) return 0;else m=height(t-lchild);n=height(t-rchild);return (mn)?m+1:n+1;3.6求叶子结点的个数:用leafcount变量表示叶子结点的总个数,用leafcount(t-lchild)、leafcount(t-rchild)分别表示访问的左右子树中叶子结点的个数。当树为空时讨论叶子结点个数无意义;当树非空时分为:一、左右子数都不存在时,即叶子结点的个数为1;二、左右子树存在,就用分别访问出左右子树中叶子结点的个数,两者相加就为二叉树叶子结点的个数。具体函数为:int leafco
10、unt(bitree t) if(!t) return 0; /空数无叶子 else if(!t-lchild&!t-rchild) return 1; else return leafcount(t-lchild)+leafcount(t-rchild);3.7主函数:包括:二叉树的数据结构bitree t、函数createbitree、height、leafcount、前序遍历preordertraverse、中序遍历inordertraverse、后序遍历postordertraverse。具体函数为:void main()bitree t;int w,v;printf(请输入建树字符序
11、列:);t=createbitree(t);printf(先序遍历的结果是:);preordertraverse(t);printf(n);printf(中序遍历的结果是:);inordertraverse(t);printf(n);printf(后序遍历的结果是:);postordertraverse(t);printf(n);printf(二叉树的深度是:);w=height(t);printf(%dn,w);printf(二叉树的叶子结点的数目为:);v=leafcount(t);printf(%d,v);printf(n);3.8完整代码:#include #include #incl
12、ude #define ok 1#define error 0#define overflow -1typedef char telemtype;typedef struct bitnode /存储结构的建立 telemtype data; struct bitnode *lchild,*rchild;bitnode ,*bitree;bitree createbitree(bitree t)char ch;scanf(%c,&ch);if(ch=0) t=NULL; /t=NULL是将二叉树置空elseif(!(t=(bitnode *)malloc(sizeof(bitnode) exit
13、(overflow); /动态申请新结点t-data=ch; /值域t-lchild=createbitree(t-lchild); /左指针域t-rchild=createbitree(t-rchild); /右指针域return t; /先序遍历void preordertraverse(bitree t) if(t)printf(%c,t-data);preordertraverse(t-lchild);preordertraverse(t-rchild); /中序遍历void inordertraverse(bitree t)if (t) inordertraverse(t-lchil
14、d);printf(%c,t-data);inordertraverse(t-rchild); /后序遍历 void postordertraverse(bitree t) if(t)postordertraverse(t-lchild);postordertraverse(t-rchild);printf(%c,t-data); /判断深度 int height(bitree t)int m,n;if(t=NULL) return 0;else m=height(t-lchild);n=height(t-rchild);return (mn)?m+1:n+1; /叶子结点个数int leaf
15、count(bitree t) /leafcount表示叶子结点的总个数if(!t) return 0; /空数无叶子else if(!t-lchild&!t-rchild) return 1;else return leafcount(t-lchild)+leafcount(t-rchild); void main()bitree t;int w,v;printf(请输入建树字符序列,以0表示NULL:);t=createbitree(t);printf(先序遍历的结果是:);preordertraverse(t);printf(n);printf(中序遍历的结果是:);inordertra
16、verse(t);printf(n);printf(后序遍历的结果是:);postordertraverse(t);printf(n);printf(二叉树的深度是:);w=height(t);printf(%dn,w);printf(二叉树的叶子结点的数目为:);v=leafcount(t);printf(%d,v);printf(n); 四、测试结果五、课程设计总结-本程序基本上实现了前序遍历,中序遍历,后序遍历,叶子结点个数的求出,二叉树深度的求出等基本操作。 迈着时间的步伐,这次的课程设计也即将结束,但这个学期数据结构的学习还是具有相当大的意义,特别是这次的课程设计,它从一个程度上改变
17、了我的编程思想,如何将一个程序快速而又准备的进行编写,进行编译,都成为了我思考的重点。同时通过这一个学期的学习,我们将数据结构的思想带入到了我们以后的编程学习中去。在这个阶段,我也明白了,好的思想,不能提留于字面上的认知,还需要平时多练多写一些相关的程序,并且通过修改,加入新的算法去尝试改变自己的一些编程思想。保持更新算法的速度,这才是关键。但在这次的课设中也遇了一些问题。做二叉树之前,必须先构思出怎样建立和想要实现那些功能。然后分块去建立各自的模型。由于做好了这些工作,我的课程设计进行的还比较顺利。但是,也出现一些很基础很低级的错误,后来经过自己的仔细分析,终于圆满完成。这说明我的程序设计基础还不是太扎实,还需要多上机实现,不能陷入只看不做的误区。通过这次的课程设计,我从中得到了许多经验和软件设计的一些新思路。从二叉树问题设计以及分析中,我理解到了数据结构对于软件设计的重要性。它的使用,可以改变软件的运行周期,思路从繁化简,并且都能够通过其相关引导,将本身
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《医学统计学》2022-2023学年第一学期期末试卷
- 石河子大学《结构试验》2023-2024学年第一学期期末试卷
- 石河子大学《建筑结构抗震设计》2021-2022学年第一学期期末试卷
- 沈阳理工大学《走近科技》2022-2023学年第一学期期末试卷
- 沈阳理工大学《市场调查》2022-2023学年第一学期期末试卷
- 沈阳理工大学《经贸翻译》2023-2024学年第一学期期末试卷
- 2018年四川内江中考满分作文《我心中的英雄》15
- 沈阳理工大学《产品交互设计》2023-2024学年第一学期期末试卷
- 广州市合同监督条例
- 韩文 法律代理合同范本
- 建设银行纪检监察条线考试真题模拟汇编(共630题)
- 乡村振兴知识题库(含答案)
- 纳洛酮的临床应用课件
- 国家开放大学应用写作(汉语)形考任务1-6答案(全)
- 宪法学知到章节答案智慧树2023年兰州理工大学
- 学生家长陪餐制度及营养餐家长陪餐记录表
- 注塑参数表完整版
- 品牌价值与品牌资产
- 银行中层干部面试问题及回答
- 统计信号分析知到章节答案智慧树2023年哈尔滨工程大学
- 甲醇制烯烃催化剂SAPO-34分子筛的合成与改性共3篇
评论
0/150
提交评论