《二叉树的基本操作》课程设计.doc
《《二叉树的基本操作》课程设计.doc》由会员分享,可在线阅读,更多相关《《二叉树的基本操作》课程设计.doc(13页珍藏版)》请在三一办公上搜索。
1、课程设计二叉树的基本操作课程设计论文学生姓名 学 号 所属学院 信息工程学院 专 业 计算机科学与技术 班 级 计算机 指导教师 教师职称 讲师 塔里木大学教务处制目录前言1正文12.1设计目的及意义12.2问题描述12.3 数据结构分析22.4算法设计及分析22.5算法测试及分析6总结7参考文献8附录9前言数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。通过一学期的学习,对数据结构这门学科有了了解。为了检验这学期所学的知识,不光要通过考试,还要对其中的知识点进行深一步的了解探讨和研究。所以做这个课程设计对知识点可以深度的研究。当数据的逻辑结构确定以
2、后,数据在物理空间中的存储方式,称为数据的存储结构。同一逻辑结构可以具有不同的存储结构,因而有不同的算法。本次课程设计,程序中的数据采用“树形结构”作为其数据结构。具体采用的是二叉树。二叉树是树形结构的一个重要的类型,二叉树是n(n0)个结点的有限集,它或者是空集(n0),或者由一个根结点以及两棵互不相交的,分别称为左子树和右子树的二叉树组成。二叉树的顺序存储结构是把二叉树所有结点,按照一定的次序排序,存储到一片连续的存储单元中。但二叉树的顺序存储结构浪费空间并且插入、删除不方便。二叉树的链式存储每个结点至少包含三个域:数据域、左指针域、右指针域,不浪费空间。二叉树的存储结构和算法比较简单,特
3、别适合计算机处理,即使一般形式的树也可简单的转换为二叉树。现实中经常用到二叉树,因此本课程设计主要实现了二叉树的建立、三种遍历,计算二叉数的树深、统计叶子结点的个数等功能。正文2.1设计目的及意义课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。2.2问题描述二叉树的很多操作都是基于遍历实现的。二叉树的遍历是采用某种策略使得采用树型结构组织的若干结点对应于一个线性序列。二叉树的遍历策略有四种先序遍历、中序遍历、后序遍历和层次遍历。(1)按先序次序输入二叉树中结点的值,构造二叉链表表示
4、的二叉树t;(2)对二叉树t作先序、中序、后序遍历的递归算法,输出结果;(3)计算二叉树t的深度,输出结果;(4)计算二叉树t的叶子结点个数2.3 数据结构分析本程序分为:7大模块。二叉树的建立链式存储结构、前序遍历、中序遍历、后序遍历、求叶子结点的个数计算、中序遍历、后序遍历、深度、主函数。1、二叉树的建立链式存储结构;首先typedef struct BiTNode:定义二叉树的链式存储结构,此处采用了每个结点中设置三个域,data:即值域,*lchild:左指针域和rchild:右指针域。2、二叉树的前序遍历;利用二叉链表作为存储结构的前序遍历:先访问根结点,再依次访问左右子树。3、二叉
5、树的中序遍历;利用二叉链表作为存储结构的中序遍历:先访问左子数,再访问根结点,最后访问右子树。4、二叉树的后序遍历;利用二叉链表作为存储结构的前序遍历:先访问左右子树,再访问根结点。5、求二叉树的深度:首先判断二叉树是否为空,若为空则此二叉树的深度为0。否则,就先别求出左右子树的深度并进行比较,取较大的+1就为二叉树的深度。6、二叉树的求叶子结点的个数计算;先分别求得左右子树中各叶子结点个数,再计算出两者之和即为二叉树的叶子结点数。7、主函数。主函数中分别调用各函数。2.4算法设计及分析算法流程图Main()CreateBiTree ()构造二叉树PreOrderTraverse()NRPre
6、Order()分别输出递归与非递归先序遍历结果InOrderTrave()NRInOrder()分别输出中序递归与非递归遍历结果PostOrderTravesr()NRPostOrder()分别输出递归与非递归的后序遍历结果求结点的中序前驱后继中序InOrderTraver() 1、存储结构的建立由递归函数实现具体函数为:typedef struct bitnode telemtype data; struct bitnode *lchild,*rchild;bitnode ,*bitree;bitree createbitree(bitree t)char ch;scanf(%c,&ch);
7、if(ch=#) t=NULL;elseif(!(t=(bitnode *)malloc(sizeof(bitnode) exit(overflow);t-data=ch;t-lchild=createbitree(t-lchild);t-rchild=createbitree(t-rchild);return t;在创建的二叉树中,左右孩子都为字符型。char的作用是输入n个任意的字符,而且在输入n个字符后,必须输入n+1个#,才能得到本程序所有能够实现的功能。t=Null是将二叉树置空。if(!(t=(bitnode *)malloc(sizeof(bitnode),采用动态申请新结点的方
8、式,不仅实现起来方便,而且还节省大量的存储空间。t-data=ch;值域t-lchild=createbitree(t-lchild);t-rchild=createbitree(t-rchild);将二叉树中的每一个结点设置为:值域,左指针域,右指针。这一小段程序实现了二叉树的置空,二叉树的建立,二叉树的存储。2、前序遍历:先访问根结点,再访问左子树,最后访问右子树。具体函数为:void preordertraverse(bitree t)if(t)printf(%c,t-data);preordertraverse(t-lchild);preordertraverse(t-rchild);
9、3、中序遍历:先访问左子树,再访问根结点,最后访问右子树。具体函数为:void inordertraverse(bitree t) if (t) inordertraverse(t-lchild);printf(%c,t-data);inordertraverse(t-rchild); 4、后序遍历:先访问左子树,再访问右子树,最后访问根结点。具体函数为:void postordertraverse(bitree t) if(t)postordertraverse(t-lchild);postordertraverse(t-rchild);printf(%c,t-data); 5、求二叉树的深
10、度:先定义三个整形变量m,n.如果树为空,则height=0;否则,先分别访问出左右子树的深度,再进行比较,将较大的+1的结果就是所求二叉树的深度。具体函数为: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;6、求叶子结点的个数:用leafcount变量表示叶子结点的总个数,用leafcount(t-lchild)、leafcount(t-rchild)分别表示访问的左右子树中叶子结点的个数。当树为空是此时讨论叶子结点个数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉树的基本操作 二叉 基本 操作 课程设计
链接地址:https://www.31ppt.com/p-2396462.html