1、是二叉搜索树是二叉搜索树 树和所有子树的左右树和所有子树的左右子树高度之差绝对值不超过子树高度之差绝对值不超过1 1111514263971816100000001*8.4.1 8.4.1 定义(定义(Balanced binary Tree Height-Balanced TreeBalanced binary Tree Height-Balanced Tree )3.3.平衡因子(平衡因子(balance factorbalance factor)结点右子树高度减去左子树高度所得高度差结点右子树高度减去左子树高度所得高度差 AVLAVL树中所有结点的平衡因子只能取树中所有结点的平衡因子只能
2、取0 0,1 1,1 1 AVL AVL树的树的ASLASL可保持在可保持在O(logO(log2 2n)n)8.4.2 8.4.2 平衡旋转平衡旋转原因原因方法方法*平衡旋转分类(平衡旋转分类(1 1)1.LL1.LL平衡旋转平衡旋转右右单旋转单旋转5040596430474030505947642.RR2.RR平衡旋转平衡旋转左左单旋转单旋转*平衡旋转分类(平衡旋转分类(2 2)3.LR3.LR平衡旋转平衡旋转先左后右双旋转先左后右双旋转h(a)F子树插入结点高度变为hCA-2FhBDE1h-1Gh插入-1(b)绕E,将B逆时针转后hACEhhBDFh-1GEBhhDFAh-1hCG(c)
3、绕E,将A顺时针转后0683985462750LR型型ABEGFDC绕绕E,将,将B逆时针转后逆时针转后5039276885AC46E绕绕E,将,将A顺时针转后顺时针转后(LL)463968278550683985462743思考:该类思考:该类LR型平衡旋转如何型平衡旋转如何处理?结果如何?处理?4.RL4.RL平衡旋转平衡旋转先右后左双旋转先右后左双旋转*8.4.3 8.4.3 平衡二叉树的插入平衡二叉树的插入1.1.平衡二叉树插入结点的算法思想平衡二叉树插入结点的算法思想(1 1)按二叉排序树的性质插入结点。)按二叉排序树的性质插入结点。(2 2)如如果果插插入入结结点点之之后后出出现现
4、不不平平衡衡的的结结点点,则则继继续续步步骤骤(3 3);否则插入完成。(3 3)找到失去平衡的最小子树。)找到失去平衡的最小子树。(4 4)判断平衡旋转的类型作相应平衡化处理)判断平衡旋转的类型作相应平衡化处理。由平衡二叉树由平衡二叉树的定义可知,的定义可知,在插入之后如在插入之后如果树上出现平果树上出现平衡因子绝对值衡因子绝对值大于大于1的结点,的结点,则说明二叉排则说明二叉排序树已不平衡。序树已不平衡。2.2.关键问题关键问题 输入次序:输入次序:11110如何发现?如何发现?,3939039 11+1,2323 11+1如何确定如何确定?在查找结点在查找结点x x的插入位置的过程中,记
5、下的插入位置的过程中,记下从根结点到插入位置的路径上离插入位置从根结点到插入位置的路径上离插入位置最近的且平衡因子绝对值为最近的且平衡因子绝对值为1 1的结点,并的结点,并令指针令指针a a指向该结点;如果此路径上不存指向该结点;如果此路径上不存在平衡因子绝对值为在平衡因子绝对值为1 1的结点,则指针的结点,则指针a a指指向根结点。向根结点。a23 39-1230如何判断如何判断?RLRLRL型型392311392311如如果果结结点点a a的的平平衡衡因因子子绝绝对对值值为为2 2,则则表表示示二二叉叉排排序序树树失失去去平平衡衡,再再根根据据结结点点a a及及其其左左右右孩子的平衡因子值
6、来确定平衡旋转的类型。孩子的平衡因子值来确定平衡旋转的类型。思考题:做平衡旋转时做平衡旋转时/后各结点的平衡因子如何变化?后各结点的平衡因子如何变化?继继续续输输入入6868,8585,8 8,3 3,4646,2727,5050,插插入入过过程?程?*8.4.4 8.4.4 平衡二叉树的删除平衡二叉树的删除1.1.平衡二叉树删除结点的算法思想平衡二叉树删除结点的算法思想(1 1)如果被删结点)如果被删结点x x有左、右孩子,首先查找有左、右孩子,首先查找x x在中序次序下的在中序次序下的直接前直接前驱驱y y(同样也可以找同样也可以找直接后继直接后继),再把结点,再把结点y y的内容传送给结
7、点的内容传送给结点x x,再,再删除结点删除结点y y。(2 2)对对于于删删除除最最多多有有一一个个孩孩子子的的结结点点x x,可可以以简简单单地地把把x x的的双双亲亲结结点点中中原原来来指指向向x x的的指指针针改改指指到到x x的的孩孩子子结结点点。如如果果结结点点x x没没有有孩孩子子,则则其其双双亲亲结结点点的相应指针置为空。的相应指针置为空。hhhABCDE0-1hh-1hABCEFG(3 3)对对于于从从结结点点x x的的双双亲亲到到根根结结点点的的路路径径上上的的每每一一个个结结点点P P,当当布布尔尔变变量量shorter(shorter(子子树树高高度度是是否否被被缩缩短
8、短)的的值值为为truetrue时时,根根据据以以下下三三种种不不同同的的情情况况继继续续步步骤骤,直直到到布布尔尔变变量量shortershorter的的值值为为falsefalse时,整个删除算法结束。时,整个删除算法结束。(结点(结点y y最多有一个孩子,因为最多有一个孩子,因为y y即为即为x x左左/右子树中的最右子树中的最大大/小值,也就是小值,也就是x x左左/右子树中的最右右子树中的最右/左结点)。左结点)。*1.1.平衡二叉树删除结点的算法思想平衡二叉树删除结点的算法思想(1 1)情况一:)情况一:结结点点p p的的平平衡衡因因子子为为0 0,如如果果它它的的左左子子树树或或
9、右右子子树树被被缩缩短短(shortershorter的的值值为为truetrue),则则它它的的平平衡衡因因子子改改为为1 1或或-1-1,由由于于此此时时以以结结点点p p为为根根的的子子树树高高度度没没有有缩短,所以置缩短,所以置shortershorter的值为的值为falsefalse。6850463927118323p p(2 2)情况二:)情况二:结结点点p p的的平平衡衡因因子子不不为为0 0,且且其其较较高高的的子子树树被被缩缩短短,则则P P的的平平衡衡因因子子改改为为0 0。由由于于此此时时以以结结点点p p为为根根的的子子树树高高度度被被缩缩短,所以短,所以shorte
10、rshorter的值仍为的值仍为truetrue。1 1 0 0*1.1.平衡二叉树删除结点的算法思想平衡二叉树删除结点的算法思想(1 1)情况三:)情况三:结结点点p p的的平平衡衡因因子子不不为为0 0,且且较较矮矮的的子子树树又又被被缩缩短短,则则在在结结点点p p发发生生不不平平衡衡。此此时时,将将进进行行平平衡化旋转来恢复平衡。衡化旋转来恢复平衡。68504639278323如如果果q q的的平平衡衡因因子子为为0 0,则则只只要要执执行行一一个个单单旋旋转转就就可可恢恢复复结结点点p p的的平平衡衡,由由于于旋旋转转后后被被处处理理子子树树的的高度没有缩短,所以置高度没有缩短,所以
11、置shortershorter的值为的值为falsefalseP P(1 1)q q 0 06850462383927如如果果q q的的平平衡衡因因子子与与p p的的平平衡衡因因子子相相同同,则则只只要要执执行行一一个个单单旋旋转转就就可可恢恢复复结结点点p p的的平平衡衡。由由于于此此时时被被处处理理子子树树的的高高度度被被缩缩短短,所所以以shortershorter的的值值仍仍为为truetrue。最最后,结点后,结点p p和和q q的平衡因子均改为的平衡因子均改为0 0。685046398323q(1)q(1)68504623839如果如果p p与与q q的平衡因子的符号相反,则需要执
12、行一的平衡因子的符号相反,则需要执行一个双旋转来恢复平衡,先围绕个双旋转来恢复平衡,先围绕q q转、再围绕转、再围绕p p转。由转。由于此时被处理子树的高度被缩短,所以于此时被处理子树的高度被缩短,所以shortershorter的值仍的值仍为为truetrue,新的根结点的平衡因子置为,新的根结点的平衡因子置为0 0,其它结点的,其它结点的平衡因子作相应处理。平衡因子作相应处理。684639278323P(1)P(1)q(-q(-1 1)*8.5 B8.5 B树树顺序查找、二分查找、二叉排序树适用于内查找顺序查找、二分查找、二叉排序树适用于内查找(较小较小的表的表);不适用于较大的、存储在外
13、存储器上的文件。;(平平衡衡)二叉排序树中二叉排序树中若以结点作为内外存交换的单位,则在查若以结点作为内外存交换的单位,则在查找过程中需对外存进行找过程中需对外存进行log2n次访问,显然很费时。次访问,显然很费时。分块查找可以应用于外查找;B-B-树是一种多路平衡查找树是一种多路平衡查找树,也适用于外查找。树,也适用于外查找。8.5.1 8.5.1 基本概念基本概念1.1.动态的动态的mm路查找树路查找树类似静态表的分类似静态表的分块(索引)查找块(索引)查找一棵一棵m路查找树,它或者是一棵空树,或者是满足如下性质的树:路查找树,它或者是一棵空树,或者是满足如下性质的树:(1)根根结结点点最
14、最多多有有m棵棵子子树树,并并具具有有如如下下的的结结构构:(n、p0、k1、p1、k2、p2、kn、pn),其其中中,Pi是是指指向向子子树树的的指指针针,Ki是数据元素的关键字;是数据元素的关键字;1inm。(2)KiKi+1,1in。(3)在在Pi所指的子树中所有的数据元素的关键字都小于所指的子树中所有的数据元素的关键字都小于K i+1,且,且大于大于K i,0in。(4)在在Pn所所指指的的子子树树中中所所有有数数据据元元素素的的关关键键字字都都大大于于kn,而而子子树树P0中的所有数据元素的关键字都小于中的所有数据元素的关键字都小于K1。(5)Pi所指的子树也是所指的子树也是m路查找
15、树,路查找树,0in。特点:对于一棵对于一棵m路查找树,适路查找树,适当提高查找树的路数当提高查找树的路数m,可以改,可以改善善m路查找树的查找性能。路查找树的查找性能。如果查找树是平衡的,可如果查找树是平衡的,可以使以使m路查找树的查找性能接近路查找树的查找性能接近最佳。最佳。*8.5.1 8.5.1 基本概念基本概念2.B2.B树树q定义定义B-B-树是一种树是一种平衡的平衡的多路查找树多路查找树,用于文件系统。,用于文件系统。一棵一棵m m阶的阶的B-B-树树,或为空或为空,或为满足下列特性的或为满足下列特性的m m叉树叉树v树中每个结点树中每个结点至多至多有有m m棵子树棵子树;v若根结点不是叶子结点若根结点不是叶子结
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1