




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9.1 概述,9.1.1 查找表,9.1.2 相关术语,9.1.3 类型说明,9.2 静态查找表,9.2.1 概述,9.2.2 顺序表的查找,9.2.3 有序表的查找,9.2.4 索引顺序表的查找,9.3 动态查找表,9.3.1 概述,9.3.2 二叉排序树和平衡二叉树,9.3.3 B-树和B+树,9.4 哈希表,9.4.1 定义,9.4.2 哈希函数的构造,9.4.3 处理冲突的方法,9.4.4 哈希表的查找及其分析,第九章查找,(2)平衡二叉树,定义,平衡二叉树(Balanced Binary Tree 或Height-Balanced Tree)又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。,平衡因子BF(Balance Factor):二叉树上结点的左子树的深度减去它的右子树的深度的值。,由平衡二叉树的定义易知,平衡二叉树上所有结点的平衡因子只可能 是1、0和1。,(2)平衡二叉树,定义,例如,图9.6(a)所示为两棵平衡二叉树,而图9.6(b)为两棵不平衡二叉树,结点中的值为该结点的平衡因子,图形表示,(a) 平衡二叉树,(b) 不平衡二叉树,图9.6平衡与不平衡二叉树及结点的平衡因子,平衡二叉树是二叉排序树的另一种形式。我们希望由任何初始序列构成的二叉排序树都是平衡二叉树。因为平衡二叉树上任何结点的左右子树的深度之差都不超过1,则可以证明它的深度和logN是同数量级的(其中N是结点的个数)。由此,它的平均查找长度也和logN同数量级。,typedef structBSTNode ElemTypedata;intbf;/结点的平衡因子struct BSTNode *lchild, *rchild;/左、右孩子指针 BSTNode, * BSTree;,C语言描述,构造二叉平衡(查找)树的方法是:在插入过程中,采用平衡旋转技术。,构造二叉平衡(查找)树的方法是:在插入过程中,采用平衡旋转技术。,例如:依次插入的关键字为5, 4, 2, 8, 6, 9,5,4,2,4,2,5,8,6,6,5,8,4,2,向右旋转一次,先向右旋转再向左旋转,9,5,向左旋转一次,继续插入关键字 9,假设由于在二叉排序树上插入结点而失去平衡的最小子树根结点的指针为a(即a是离插入结点最近,且平衡因子绝对值超过1的祖先结点),则失去平衡后进行调整的规律可归纳为下列4种情况:,平衡调整,1单向右旋平衡处理: 由于在*a的左子树根结点的左子树上插入结点,*a的平衡因子由1增至2,致使以*a为根的子树失去平衡,则需进行一次向右的顺时针旋转操作。如图9.6(a)所示。,2单向左旋平衡处理: 由于在*a的右子树根结点的右子树上插入结点,*a的平衡因子由1变为2,致使以*a为根的子树失去平衡,则需进行一次向左的顺逆针旋转操作。如图9.6(c)所示。,3双向旋转(先左后右)平衡处理: 由于在*a的左子树根结点的右子树上插入结点,*a的平衡因子由1增至2,致使以*a为根的子树失去平衡,则需进行两次旋转(先左旋后右旋)操作。如图9.6(b)所示。,4双向旋转(先右后左)平衡处理: 由于在*a的右子树根结点的左子树上插入结点,*a的平衡因子由1变为2,致使以*a为根的子树失去平衡,则需进行两次旋转(先右旋后左旋)操作。如图9.6(d)所示。,插入算法,算法思想:在平衡二叉排序树BBST上插入一个新的数据元素e的递归算法可描述如下:,1若BBST为空树,则插入一个数据元素为e的新结点作为BBST的根结 点,树的深度增1;,2若e的关键字和BBST的根结点的关键字相等,则不进行插入;,3若e的关键字小于BBST的根结点的关键字,而且在BBST的左子树中不存在和e有相同关键字的结点,则将e插入在BBST的左子树上,并且当插入之后的左子树深度增加(1)时,分别就下列不同情况处理之:,iBBST的根结点的平衡因子为1(右子树的深度大于左子树的深度):则将根结点的平衡因子更改为0,BBST的深度不变;,iiBBST的根结点的平衡因子为0(左、右子树的深度相等):则将根结点的平衡因子更改为1,BBST的深度增1;,iiiBBST的根结点的平衡因子为1(左子树的深度大于右子树的深度): a.若BBST的左子树根结点的平衡因子为1,则需进行单向右旋平衡处理,并且在右旋处理之后,将根结点和其右子树根结点的平衡因子更改为0,树的深度不变; b. 若BBST的左子树根结点的平衡因子为1,则需进行先向左、后向右的双向旋转平衡处理,并且在旋转处理之后,修改根结 点和其左、右子树根结点的平衡因子,树的深度不变。,4若e的关键字大于BBST的根结点的关键字,而且在BBST的右子树中不存在和e有相同关键字的结点,则将e插入在BBST的右子树上,并且当插入之后的右子树深度增加(1)时,分别就不同情况处理之。其处理操作和上述3中描述相对称。,typedef structBSTNode ElemTypedata;intbf;/结点的平衡因子struct BSTNode *lchild, *rchild;/左、右孩子指针 BSTNode, * BSTree;,算法9.7如下: void R_Rotate (BSTree /p指向新的根结点 / R_Rotate,p,lc,算法9.8如下: void L_Rotate (BSTree /p指向新的根结点 / L_Rotate,p,lc,算法9.10如下:,#defineLH+1/左高#defineEH0/等高#defineRH-1/右高Status InsertAVL (BSTree &T, ElemType e, Boolean &taller) /若在平衡的二叉排序树T中不存在和e有相同关键字的结点,则插入 /一个数据元素为e的新结点,并返回1,否则返回0。若因插入而使二 /叉排序树失去平衡,则作平衡旋转处理,布尔变量taller反映T长高 /与否。,if (!T) /插入新结点,树“长高”,置taller为TRUET = (BSTree) malloc (sizeof (BSTNode);Tdata = e;Tlchild = Trchild = NULL;,Tbf = EH;taller = TRUE; ,else /应继续在*T的右子树中进行搜索if (!InsertAVL(Trchild, e, taller)/未插入 return 0;if (taller)/已插入到*T的右子树中且右子树“长高” switch (Tbf) /检查*T的平衡度case LH:/原本右子树比左子树高,现左、右子树等高Tbf = EH;taller = FALSE;break;case EH:/原本左右子树等高,现因右子树增高而使树增高Tbf = RH;taller = TRUE;break; case RH:/原本右子树比左子树高,需要作右平衡处理RightBalance (T);taller = FALSE;break; / switch (Tbf) / else / else return 1; / InsertAVL,void LeftBalance (BSTree ,case RH: Tbf = EH; lcbf = LH; break; / switch (rdbf)rdbf = EH;L_Rotate (Tlchild);/对*T的左子树作左旋平衡处理R_Rotate (T);/对*T作右旋平衡处理 / switch (lcbf) / LeftBalance,在平衡树上进行查找的过程和二叉排序树相同,因此,查找过程中和给定值进行比较的关键字的个数不超过平衡 树的深度。,平衡树的查找性能分析:,问:含 n 个关键字的二叉平衡树可能达到的最大深度是多少?,n = 0,空树,最大深度为 0,n = 1,最大深度为 1,n = 2,最大深度为 2,n = 4,最大深度为 3,n = 7,最大深度为 4,先看几个具体情况:,反过来问,深度为 h 的二叉平衡树中所含结点的最小值 Nh 是多少?,h = 0,N0 = 0,h = 1,h = 2,h = 3,一般情况下,,N1 = 1,N2 = 2,N3 = 4,Nh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建厦门市杏南中学非在编教师招聘3人笔试备考试题及答案解析
- 临街独立门面转让协议书
- 同城订酒店担保合同范本
- 专利转让合同范本模板
- 比亚迪机械租赁合同范本
- 软件服务合同范本
- 拆除违建早餐店合同范本
- 旅游线路合作合同协议书
- 买回迁房合同补充协议
- 微型鼓风机租赁合同范本
- 2024年度德国企业博士实习生招聘与雇佣合同3篇
- 环卫公司培训课件
- 企业环保组织机构情况及管理制度模版(3篇)
- 仓库年度评审报告范文
- 《工会财务与会计》课件
- 【课件】第六章+几何图形初步++综合与实践+设计学校田径运动会比赛场地课件人教版数学七年级上册
- 物业保洁员礼节礼貌培训
- 中枢神经系统药理学概论课件
- DB65-T 4773-2024 生物安全实验室消毒技术指南
- 成人体外膜氧合辅助期间感染防控专家共识2024版
- 2024年河北石家庄市井陉矿区人力资源和社会保障局公益性岗位招聘100人历年(高频重点提升专题训练)共500题附带答案详解
评论
0/150
提交评论