二叉排序树及平衡二叉排序树基本操作实现.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《二叉排序树及平衡二叉排序树基本操作实现.docx》由会员分享,可在线阅读,更多相关《二叉排序树及平衡二叉排序树基本操作实现.docx(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二叉排序树及平衡二叉排序树基本操作实现0/15编编号:号:B04900083课课 程程 设设 计计学学号:号:2教教 学学 院院计算机学院课程名称课程名称数据结构及算法题题目目二叉排序树及平衡二叉排序树基本操作的实现专专业业计算机科学及技术班班级级二班姓姓名名同组人员同组人员指导教师指导教师成俊2015 年12 月27日二叉排序树及平衡二叉排序树基本操作实现1/15课程设计任务书课程设计任务书20152016学年 第 1 学期学生姓名学生姓名:专业班级:专业班级:计科二计科二指导教师:指导教师:成俊成俊工作部门:工作部门:计算机学院计算机学院一、课程设计题目一、课程设计题目:二叉排序树及平衡二
2、叉排序树基本操作二、课程设计内容二、课程设计内容用二叉链表作存储结构,编写程序实现二叉排序树上的基本操作:以回车(n)为输入结束标志,输入数列 L,生成二叉排序树 T;对二叉排序树 T 作中序遍历;计算二叉排序树 T 的平均,输出结果;输入元素 x,查找二叉排序树T,若存在含 x 的结点,则删除该结点,并作中序遍历;否则输出信息“无结点x”;判断二叉排序树 T 是否为平衡二叉树;再用数列 L,生成平衡二叉排序树BT:当插入新元素之后,发现当前的二叉排序树 BT 不是平衡二叉排序树,则立即将它转换成新的平衡二叉排序树 BT;计算平衡的二叉排序树 BT 的平均查找长度,输出结果.三、进度安排三、进
3、度安排1分析问题,给出数学模型,选择数据结构。2设计算法,给出算法描述3给出源程序清单4.编辑、编译、调试源程序5.撰写课程设计报告四、基本要求四、基本要求编写 AVL 树判别程序,并判别一个二叉排序树是否为 AVL 树。二叉排序树用其先序遍历结果表示,如:5,2,1,3,7,8。实现 AVL 树的 ADT,包括其上的基本操作:结点的加入和删除;另外包括将一般二叉排序树转变为 AVL 树的操作。实现提示主要考虑树的旋转操作.二叉排序树及平衡二叉排序树基本操作实现2/15目录目录一、课程设计题目:二叉排序树及平衡二叉排序树基本操作.1二、课程设计内容.1三、进度安排.1四、基本要求.1一、概述.
4、31。课程设计的目的.32。课程设计的要求.3二、总体方案设计.4三、详细设计.61。课程设计总体思想.62.模块划分.73。流程图.8四、程序的调试及运行结果说明.9五、课程设计总结.14参考文献.14二叉排序树及平衡二叉排序树基本操作实现3/15一、概述一、概述1 1。课程设计的目的。课程设计的目的1.充分理解和掌握二叉树、平衡二叉树的相关概念和知识。2.掌握排序二叉树的生成、结点删除、插入等操作过程。3.并实现从键盘上输入一系列数据(整型),建立一棵平衡二叉树。4.任意插入或删除一个结点后判断是否为平衡二叉树。5将非平衡二叉树转换成平衡二叉树。6.按中序遍历输出这棵平衡二叉树.2.2.课
5、程设计的要求课程设计的要求用二叉链表作存储结构,编写程序实现二叉排序树上的基本操作:以回车(n)为输入结束标志,输入数列 L,生成二叉排序树 T;对二叉排序树 T 作中序遍历;计算二叉排序树 T 的平均查找长度,输出结果;输入元素 x,查找二叉排序树 T,若存在含 x 的结点,则删除该结点,并作中序遍历;否则输出信息“无结点 x;判断二叉排序树 T 是否为平衡二叉树;再用数列 L,生成平衡二叉排序树 BT:当插入新元素之后,发现当前的二叉排序树 BT 不是平衡二叉排序树,则立即将它转换成新的平衡二叉排序树BT;计算平衡的二叉排序树BT的平均查找长度,输出结果.编写 AVL 树判别程序,并判别一
6、个二叉排序树是否为 AVL 树。二叉排序树用其先序遍历结果表示,如:5,2,1,3,7,8。实现 AVL 树的 ADT,包括其上的基本操作:结点的加入和删除;另外包括将一般二叉排序树转变为 AVL 树的操作.实现提示主要考虑树的旋转操作。二叉排序树及平衡二叉排序树基本操作实现4/15二、总体方案设计二、总体方案设计1)建立二叉排序树,编写二叉排序树 T 作中序遍历.2)查找删除二叉排序树函数。3)编写判断二叉排序树 T 是否为平衡二叉树函数,把非平衡二叉排序树转换成平衡二叉排序树。4)编写计算二叉树 BT 的平均查找长度函数。我负责的是第一部分,二叉排序树或者是一棵空树,或者是具有下列性质的二
7、叉树:1.若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2.若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3。它的左、右子树也分别为二叉排序树。以链表存储结构创建二叉排序树,以回车(n)为输入结束标志,输入数列 L,生成二叉排序树 T;对二叉排序树 T 作中序遍历。中序遍历二叉树算法的框架是:若二叉树为空,则空操作;否则(1)中序遍历左子树(L);(2)访问根结点(V);(3)中序遍历右子树(R)。函数 1:中序遍历二叉树中序遍历二叉树也采用递归函数的方式,先访问左子树 2i,然后访问根结点 i,最后访问右子树 2i+1。先向左走到底再层层返回,直至所有的结点都
8、被访问完毕。(谢石林)函数 2:平均查找长度计算二叉排序树的平均查询长度时,可采用类似中序遍历的递归方式,用 s 记录总查询长度,j 记录每个结点的查询长度,s 值初值为 0,采用累加的方式最总得到总查询长度 s,平均查询长度等于 s/i(i 为树中结点个数)。(吴进)函数 3:查找删除二叉排序树函数输入元素 x,查找二叉排序树 T,若存在含 x 的结点,则删该结点,并作中序遍历(执行函数 1);否则输出信息“无 x”。(张常勋)函数 4:判断二叉排序树 T 是否为平衡二叉树,若不是则用数列 L,生成平衡排序二叉树 BT;最后调用函数 6,接着调用函数 5.判断二叉排序树是否为平衡二叉树的函数
9、也是采用递归函数的方式,分别判定以树中每个节点二叉排序树及平衡二叉排序树基本操作实现5/15为根节点的子树是否为平衡二叉树。只要有一个子树不为平衡二叉树,则该树便不是平衡二叉树.函数 5:在平衡二叉树 BT 上插入新元素,若发现当前的二叉排序树 BT 不是平衡二叉排序树,则立即将它转换成新的平衡二叉排序树 BT。二叉排序树及平衡二叉排序树基本操作实现6/15三、详细设计三、详细设计1 1。课程设计总体思想。课程设计总体思想1。生成二叉排序树:建立二叉排序树采用的是边查找边插入的方式。查找函数采用递归的方式进行查找。查找是按照二叉排序树的性质进行的,通过比较要插入元素的关键字及当前结点关键字的大
10、小来决定我们是遍历当前结点的哪个子树.如果小于当前结点关键字,则遍历它的左子树;大于当前结点关键字,则遍历它的右子树;等于当前关键字,则此元素不插入原树。我们按照这样的规律,一直向下遍历,知道它的子树为空,则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。2。中序遍历:对二叉排序树进行中序遍历采用递归函数的方式。在根节点不为空的情况下,先访问左子树,在访问根结点,最后访问右子树。3.平均查找长度:计算二叉排序树的平均查找长度,仍采用类似中序遍历的递归方式,用 s记录总查找长度,j 记录每个结点的查找长度,s 置初值为 0,采用累加的方式最终得到总查找长度 s,平均查找长度就等于 s
11、/j(i 为树中结点的总个数)。4。删除结点:删除结点函数,采用边查找变删除的方式.如果没有查找到,则不对树做任何的修改:如果查找到结点,则分四种情况分别进行讨论:(1)该结点左右子树均为空;(2)该结点仅左子树为空;(3)该结点仅右子树为空;(4)该结点左右子树都不为空;5用数列 L,生成平衡的二叉排序树 BT;当插入新元素之后,发现当前的二叉排序树 BT 不是平衡二叉排序树,则立即将它转换成新的平衡的二叉排序树 BT。我所负责的模块函数定义如下void TraverseOrderDSTable(BSTree DT,void(*Visit)(ElemType)/按中序遍历详细的程序代码如下:
12、typedef struct BSTNode/二叉排序树类型 ElemType data;二叉排序树及平衡二叉排序树基本操作实现7/15struct BSTNode*lchild,rchild;BSTNode,BSTree;Status InitDSTable(BSTree&DT)/构造一个空的动态 BST 查找表 DTDT=NULL;return 1;void TraverseOrderDSTable(BSTree DT,void(*Visit)(ElemType)/按中序遍历对 DT 的每个结点调用函数 Visit()一次且至多一次if(DT)TraverseOrderDSTable(DT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉排序树 平衡 基本 操作 实现
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内