当前课程知识点:数据结构(下) > 第八章 高级搜索树(下) > (b5)B-树: 删除 > 08B5-3 合并
好 我们现在就来考察这样一种情况
这也是我们需要考察的最后一种情况
也就是说 发生下溢的节点 在经过左顾右盼以后发现
无论是它的左兄弟还是右兄弟 都或者不存在
或者所包含的关键码还不足够多 以致于不足以借出一个
当然 情况还不至于糟糕透顶
因为左右兄弟中 还至少存在其一
不失一般性 假设下溢节点V的左兄弟至少是存在的
尽管它不足以借出任何关键码
当然 此时处于下溢临界状态的节点L
应该恰好拥有m/2-1个关键码
细加观察 不难发现一个现象
此时无论是V 还是L 关键码数都非常的少
这三者的总和也没有超出B树关于
单个节点中所含关键码总数所设定的那个上限
具体来说 也就是m-1
顺着这个思路 我们不难得到一种修正此处下溢的方法
具体来说 也就是从父节点中将这个分隔的关键码y取出来
并且就以这个关键码作为粘合剂
将刚才的V以及它的左兄弟L 合并起来
成为一个新的节点
在这个新的节点中 尽管表面看来 所含的关键码很多
但是正如我们刚才所分析的 其总数也不至超出m-1
因此 它必然是一个合法的节点
而相应的 原先节点V所发生的下溢 也在无形之中被排解掉了
在此之后 原先关键码y所对应的两个分支 也应该合并起来
并指向这个新生成的大节点
同样 我们需要验证一样 至此 这个局部乃至全树
都依然保持中序遍历意义上的顺序性
当然 在某一种情况下 故事依然没有完结
什么情况呢?
细心的你 可能已经注意到了
经过这样的处理之后 父节点无形之中损失了一个关键码
我们可以等效的认为 刚才是从父节点中删除了这个关键码
因此 在这个父节点处 可能相继地发生一次下溢
不难理解 这也是故事得以延续
使得我们必须做进一步处理的唯一可能
那么果真发生情况 又当如何处理呢
可以送给你四个字 如法炮制
没错 借助旋转以及合并 这两种手段
我们足以处理每一次新发生的上溢(口误,应为下溢)
当然 这里的好消息依然是 即便会继续发生上溢
它的高度 相对于此前的那次上溢 也必然会有所提升
也就是说 整个过程具有单调性
因此 整个调整的过程或者在中途停止
或者充其量抵达树根
也就是说 如果全树高度为h
那么整个修复下溢的过程 累计迭代步数也不超过O(h)
这也是我们所预期的好结果
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试