当前课程知识点:数据结构(下) > 第八章 高级搜索树(下) > (b5)B-树: 删除 > 08B5-1 算法框架
接下来 我们讨论B树的第二类动态操作 也就是删除
那么 B树的删除操作是否只是插入操作简单的逆过程呢?
我们将会看到二者有很紧密的联系 但又不尽相同
那么 应该如何将某个特定的关键码从其所属的节点中剔除掉
从而完成这样的一个转换呢?
这里我们也给出一种可能的实现方法
首先 与插入算法一样 我们也需要经过一次查找
并不失一般性 假设待删除的关键码的确存在
而且就存在于返回的节点v中
于是 我们进而通过向量的查找算法
在v中确定 目标关键码e所对应的秩
当然 我们希望此时的节点v是一匹叶子
然而 这一点并非总能保证
如果它不是一个叶节点 我们就要深入到关键码e所对应的右子树
然后一路的沿着最左侧的分支向下
如此最终抵达的节点u就必然是e的直接后继
以下只要令u和v互换位置 即可等效的保证
待删除的关键码e来自于名为v的某一个叶节点中
而且这个关键码在v中对应的秩为r
因此只需将这个关键码从关键码向量中剔除
同时 删除其对应的那个分支
与插入算法同理 如果你不太在意算法的可读性
在这里 你要删除的未必是第r+1个分支
而可以选择其中的任何一个 比如最后一个
因为所有的这些孩子 此时无非都是空
同样的 在你更新了规模记录之后 故事还并没有完结
因为与插入过程完全对称的 在损失了这样一个关键码之后
当前的节点v 有可能会突破B树关于分支数所设定的下限
对称的 我们也称这种现象为下溢 underflow
为此 我们在返回之前 还需要检查并且处理这种情况
那么具体的 如何处置这种情况呢?
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试