数据结构——C++实现 缪淮扣 顾训穰 沈俊 数据结构-第八章新.pptVIP

数据结构——C++实现 缪淮扣 顾训穰 沈俊 数据结构-第八章新.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
平衡二叉树的插入 平衡二叉树插入结点的算法思想如下: (1)按二叉排序树的性质插入结点。 (2)如果插入结点之后出现不平衡的结点,则继续步骤(3);否则插入完成。 (3)找到失去平衡的最小子树。 (4)判断平衡旋转的类型作相应平衡化处理。 在此算法中,有以下三个关键问题: 其一、如何发现插入后出现不平衡的结点呢? 其二、如何确定失去平衡的最小子树呢? 其三、又如何判断平衡旋转的类型呢? 由平衡二叉树的定义可知,在插入之后如果树上出现平衡因子绝对值大于1的结点,则说明二叉排序树已不平衡。这时失去平衡的最小子树的根结点必为离插入结点最近,而且插入之前平衡因子绝对值为1的结点。 要解决上述三个问题可以如下处理: (1)在查找结点x的插入位置的过程中,记下从根结点到插入位置的路径上离插入位置最近的且平衡因子绝对值为1的结点,并令指针a指向该结点;如果此路径上不存在平衡因子绝对值为1的结点,则指针a指向根结点。 (2)对于从a结点到x结点的路径上的每一个结点(不包括结点x),根据结点中关键字和x的大小比较修改结点的平衡因子。如果结点关键字大于x,则结点平衡因子减1;否则结点平衡因子加1。 (3)如果结点a的平衡因子绝对值为2,则表示二叉排序树失去平衡,再根据结点a及其左右孩子的平衡因子值来确定平衡旋转的类型。 从空树开始,不断地用上述算法插入结点就可建立平衡二叉树。例如,输入关键字序列为{11、39、23、68、85、8、3、46、27、50},右图给出了从空树开始按此顺序插入结点并进行调整的过程。 平衡二叉树的删除 在平衡二叉树上进行删除操作时,同样也需要考虑平衡化旋转问题。删除算法的思想如下: (1)如果被删结点x有左、右孩子,首先查找x在中序次序下的直接前驱y(同样也可以找直接后继),再把结点y的内容传送给结点x,再删除结点y(结点y最多有一个孩子)。 (2)对于删除最多有一个孩子的结点x,可以简单地把x的双亲结点中原来指向x的指针改指到x的孩子结点。如果结点x没有孩子,则其双亲结点的相应指针置为空。 (3)对于从结点x的双亲到根结点的路径上的每一个结点P,当布尔变量shorter的值为true时,根据以下三种不同的情况继续步骤,直到布尔变量shorter的值为false时,整个删除算法结束。 (4)情况一,当结点p的平衡因子为0,如果它的左子树或右子树被缩短(shorter的值为true),则它的平衡因子改为1或-1,由于此时以结点p为根的子树高度没有缩短,所以置shorter的值为false。 (5)情况二,结点p的平衡因子不为0,且其较高的子树被缩短,则P的平衡因子改为0。由于此时以结点p为根的子树高度被缩短,所以shorter的值仍为true。 (6)情况三,结点p的平衡因子不为0,且较矮的子树又被缩短,则在结点p发生不平衡。此时,将进行平衡化旋转来恢复平衡。令结点P的较高子树的根结点为q,则根据结点p和q的平衡因子值,有如下三种平衡化操作。 1)如果q的平衡因子为0,则只要执行一个单旋转就可恢复结点p的平衡,由于旋转后被处理子树的高度没有缩短,所以置shorter的值为false。 2)如果q的平衡因子与p的平衡因子相同,则只要执行一个单旋转就可恢复结点p的平衡。由于此时被处理子树的高度被缩短,所以shorter的值仍为true。最后,结点p和q的平衡因子均改为0。 3)如果p与q的平衡因子的符号相反,则需要执行一个双旋转来恢复平衡,先围绕q转、再围绕p转。由于此时被处理子树的高度被缩短,所以shorter的值仍为true,新的根结点的平衡因子置为0,其它结点的平衡因子作相应处理。 平衡二叉树中删除结点后平衡旋转的示例 B—树 二叉排序树比较适合于在内存中组织较小的索引。对于存放在外存中的较大的文件系统,用二叉排序树来组织索引就不太合适了。若以结点作为内外存交换的单位,则在查找过程中需对外存进行log2n次访问,显然很费时。因此在文件检索系统中大量使用的是用B—树或B+树做文件索引。 动态的m路查找树 一棵m路查找树,它或者是一棵空树,或者是满足如下性质的树: (1)根结点最多有m棵子树,并具有如下的结构:(n、p0、k1、p1、k2、p2、…、kn、pn)其中,Pi是指向子树的指针,Ki是数据元素的关键字;1≤i≤n<m。 (2)Ki<Ki+1,1≤i<n。 (3)在Pi所指的子树中所有的数据元素的关键字都小于K i+1,且大于K i,0in。 (4)在Pn所指的子树中所有数据元素的关键字都大于kn,而子树P0中的所有数据元素的关键字都小于K1。 (5)Pi所指的子树也是m路查找树,0≤i≤n。 下图是一棵3路查找树,它有9个数据元素。 对于

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档