实验四-平衡二叉树演示.docx

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 平衡二叉树演示问题定义及需求分析1.1课题目的和任务问题描述:利用平衡二叉树设计动态查找表。实验要求:设计平衡二叉树的动态演示的模拟程序。1)采用平衡二叉树存储结构。2)完成平衡二叉树的创建、查找、插入和删除的演示操作。3)可以考虑两棵平衡二叉树的合并。1.2数据形式输入数据形式:通过键盘输入数据输入值的范围:树中元素的值为float型,范围为1.2e-38至3.4e+38;树的名称为char类型数据,可以输入字母,数字和符号,但是长度必须在20位以内;对菜单进行操作时,输入数据长度必须在200以内,且有效的输入数据为0至7,其中0为退出程序,1至7为对应菜单的操作选项。输出数据形式:输出到显示器。1.3程序功能创建平衡二叉树存储结构,通过平衡因子,使二叉排序树达到平衡,提供平衡二叉树的创建、查找和删除,树中元素的查找、插入和删除等基本功能,可以实现创建多棵平衡二叉树,并且能够进行两棵树的合并。通过平衡二叉树,能够使树时刻保持平衡,从而提高在树中遍历数据的速度,具有重要意义。1.4测试数据1 //创建平衡二叉树2 //输入创建树的个数t1 //输入第一个树的名称5 //输入第一个树中元素的个数5 2 6 8 9 //依次输入各个元素t2 //输入第二个树的名称5 //输入第二个树中元素的个数3 1 4 10 7 //依次输入各个元素5 //层次遍历输出第一个树的结构图t1 //操作树名5 //层次遍历输出第二个树的结构图t2 //操作树名3 //插入元素操作t1 //操作树名1 //插入元素个数7 //依次插入元素5 //层次遍历输出树的结构图t1 //操作树名4 //删除元素操作t2 //操作树名1 //删除元素个数7 //依次删除元素5 //层次遍历输出树的结构图t2 //操作树名6 //合并两个树操作t1 t2 //操作树名5 //层次遍历输出树的结构图t1 //操作树名2 //查询元素操作t1 //操作树名5 //需要查询的元素(该元素树中存在)2 //查询元素操作t1 //操作树名11 //需要查询的元素(该元素树中不存在)7 //删除二叉平衡树操作t1 //操作树名2 //查询操作t1 //操作树名(会提示该树不存在,说明删除树成功)0 //退出程序概要设计2.1抽象数据类型需要定义一个树的结构类型,其中包含数据类型,它的左右孩子指针,以及平衡因子,平衡因子的取值为-1,0,1三种,分别对应树的右边高(RH),平衡(EH)和左边高(LH)三种情形,通过平衡因子的判别,来调整树的高度使其达到平衡;另外需要用到双向链表的数据结构,以及队列的数据结构。2.2主程序流程及各模块之间的调用关系详细设计3.1存储结构实现typedef struct Type{//数据类型结构 float num;}Type;/*平衡树结构声明*/typedef struct AVLTree{//二叉平衡树结构体声明 int bf;//结点的平衡因子 struct Type data;//结点数据 struct AVLTree* lchild,* rchild;//左右孩子}AVLTree,*AVL;/*队列结构声明*/typedef struct QNode{//队列 AVL tree; struct QNode* next;}QNode,*QP;typedef struct{ QP fron; QP rear;}LinkQ;/*双向链表结构声明*/typedef struct LNode{//链表 AVL t; char tree_name[NAME_LENGTH]; struct LNode* prior,* next;}LNode,*Link;3.2负责模块的伪码算法(1)void LeftBalance(AVL t){//左部平衡化处理 l=t-lchild; switch(l-bf){ //检查T的左子树平衡度,并作相应的平衡处理 case LH://新节点插入在T的左孩子的左子树上,做单右旋处理 调整平衡因子;R_Rotate(t);break; case EH://deleteAVL需要,insertAVL用不着 调整平衡因子;R_Rotate(t);break; case RH://新插入节点在T的左孩子的右子树上,做双旋处理 lr=l-rchild; switch(lr-bf){ case LH: 调整平衡因子;break; case EH: 调整平衡因子;break; case RH: 调整平衡因子;break; } 调整平衡因子; L_Rotate(t-lchild); R_Rotate(t); }}(2)void RightBalance(AVL t){//右部平衡化处理 r=t-rchild; switch(

文档评论(0)

ze122230743 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档