有点迷糊的 B 树 delete 操作

2024-06-14 15:48
文章标签 delete 迷糊 有点 操作

本文主要是介绍有点迷糊的 B 树 delete 操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 如果键 k 在节点 x 中,且 x 是叶子节点,则从 x 中删除键 k 。

2. 如果键 k 在节点 x 中,且 x 是内部节点,请执行以下操作:

a. 如果节点 x 中位于 k 之前的子节点 y 至少有 t 个键,则在以 y 为根的子树中找到 k 的前驱值 {k}'。将 x 中的 k 替换为 {k}'​​​​​​,并递归地删除 {k}'

b. 对称地,如果节点 x  中位于 k  后面的子节点 z  至少有 t  个键,则在以 z 为根的子树中找到 k 的后继值 {k}'。将 x 中的 k 替换为 {k}',并递归地删除 {k}'

c. 否则,如果 y  和 z  都只有 t-1  键,那么将 k  和 z 都合并到 y 中,然后,递归地从 y 中删除 k

3. 如果键 k 不存在于内部节点 x 中,则确定必须包含 k 的相应子树的根 c_{i}\left [ x \right ]。如果 c_{i}\left [ x \right ]  只有 t-1 键,则根据需要执行步骤 3a 或 3b,以确保下降到至少包含 t 键的节点

a. 如果 c_{i}\left [ x \right ] 只有 t-1  个键,但有一个具有 t 个键的兄弟节点,则通过将一个键从 x 向下移动到 c_{i}\left [ x \right ]  中,将一个键从 c_{i}\left [ x \right ]  的左或右同级的兄弟节点中向上移动到 x  中,并将相应的子级从兄弟节点中移动到 c_{i}\left [ x \right ]  中,为 c_{i}\left [ x \right ] 提供一个额外的键。(《算导》上没说明)

b. 如果 c_{i}\left [ x \right ] 和所有 c_{i}\left [ x \right ] 的兄弟节点都只有 t-1 键,则将 c_{i} 与其中一个同级节点合并,并将一个键从 x 向下移动到新的合并节点中,以成为该节点的中间键。

 

我一开始看得时候,没有分清楚算法中强调“x 是内部节点,但是 k 在其中或者不在其中”这个条件的意义。后来发现,这样说,只是为了方便在节点下降的过程中(搜索 k 的过程中),就已经开始进行 merge 或者 sibling 操作,而不需要等到回溯的过程中进行 merge 和 sibling。

 

也有回溯版本的,从最底层往上进行 merge 和 sibling 操作:https://www.cnblogs.com/nullzx/p/8729425.html

这篇关于有点迷糊的 B 树 delete 操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060832

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

SQL Server中,always on服务器的相关操作

在SQL Server中,建立了always on服务,可用于数据库的同步备份,当数据库出现问题后,always on服务会自动切换主从服务器。 例如192.168.1.10为主服务器,12为从服务器,当主服务器出现问题后,always on自动将主服务器切换为12,保证数据库正常访问。 对于always on服务器有如下操作: 1、切换主从服务器:假如需要手动切换主从服务器时(如果两个服务

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

PS的一些操作~持续抄袭中....

套索工具使用时移动图片——按住空格键,鼠标左键按住,拖动!

帆软报表常用操作

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 帆软报表常用操作 多序号实现使用数据集作为参数空白页或者竖线页修改页面Title金额,或者保留两位小数等等设置日期格式显示图片使用公式 多序号实现 所用函数为SEQ(),如果一张报表中需要用到多个序号,那么就需要加入参数SEQ(1),SEQ(

el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

<div v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList" :key="info.id" >编辑上传图片// oss返回线上地址http链接格式:<el-form-itemlabel="巡视结果照片":label-width="formLabelWidth"><el-upload:action="'http:

[分布式网络通讯框架]----Zookeeper客户端基本操作----ls、get、create、set、delete

Zookeeper数据结构 zk客户端常用命令 进入客户端 在bin目录下输入./zkCli.sh 查看根目录下数据ls / 注意:要查看哪一个节点,必须把路径写全 查看节点数据信息 get /第一行代码数据,没有的话表示没有数据 创建节点create /sl 20 /sl为节点的路径,20为节点的数据 注意,不能跨越创建,也就是说,创建sl2的时候,必须确保sl

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

远程桌面中使用CTRL+ALT+DELETE注意事项

今天通过远程桌面访问服务器,因为服务器上安装在虚拟机上的SVN服务器关机了。重启之后需要按CTRL+ALT+DELETE三键输入密码。但是怎么按也没反应,总是弹出本机的指令。 后来一查,原来Ctrl+Alt+Del 改键了,要按Ctrl+alt+End组合键。