数据结构-B树删除示例

article/2025/9/9 0:03:14

数据结构学习-B树删除示例

  • 1、B树简介
  • 2、在线可视化生成B树工具
  • 3、B树删除规则
  • 4、B树删除示例
    • 4.1、删除非根结点示例
    • 4.2、删除根结点示例

1、B树简介

  1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
  1、根结点至少有两个子女;
  2、每个非根节点所包含的关键字个数 j 满足:⌈ m/2⌉ - 1 <= j <= m - 1;
  3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:⌈ m/2⌉ <= k <= m ;
  4、所有的叶子结点都位于同一层。
  在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶子结点时,该k-1个关键字正好是k个孩子包含的关键字的值域的分划。
  因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。
  B-树中的一个包含n个关键字,n+1个指针的结点的一般形式为:(n,P0,K1,P1,K2,P2,…,Kn,Pn)。其中,Ki为关键字,K1<K2<…<Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针。
  ------粘百度百科

2、在线可视化生成B树工具

  网址是:https://www.cs.usfca.edu/~galles/visualization/BTree.html

3、B树删除规则

在这里插入图片描述

4、B树删除示例

  看一个具体例子,这里是以五阶B树为例,
  对于五阶B树来说:
    其中根结点关键字个数 j 满足:1 <= j <= m - 1,也就是1 ~ 4;
    其中非根结点关键字个数 j 满足:⌈ m/2⌉ - 1 <= j <= m - 1,也就是2 ~ 4;
    其中根结点子树个数 k 满足:2 <= j <= m ,也就是2 ~ 5;
    其中子结点子树个数 k 满足:⌈ m/2⌉ <= k <= m,也就是3 ~ 5。

4.1、删除非根结点示例

  关键字序列为(1,2,3,4,5,6,9,11,12,23,25,30,40,43,44,46,48,49,50,51,52,56,58,59,60,64,65,66,70,72,73,89),其中绿色的图是在线可视化生成B树工具运行结果。
  1、B树插入这里不介绍,构建完成后如图4-1所示。

在这里插入图片描述

图4-1

  2、删除关键字“60”,删除后如图4-2所示。

  图中步骤②,是根据B树删除规则中第①个【先用其直接前驱(关键字“59”(替代是先左后右))替代其位置】
  图中步骤③,是根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“58”)需要与父结点内的关键字(关键字是“56”)和左兄弟(关键字是“51、52”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数未低过下限(五阶B树非根结点的关键字个数下限是2),无需继续调整合并】

在这里插入图片描述

图4-2

  3、删除关键字“66”,删除后如图4-3所示。

  图中步骤②,根据B树删除规则中第①个【先用其直接前驱(关键字“65”(替代是先左后右))替代其位置】
  图中步骤③和步骤④,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“59”)、前驱的前驱(关键字是“58”)依次顶替空缺】

在这里插入图片描述

图4-3

  4、删除关键字“65”,删除后如图4-4所示。

  图中步骤②,根据B树删除规则中第①个【先用其直接前驱(关键字“64”(替代是先左后右))替代其位置】
  图中步骤③和步骤④,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“58”)、前驱的前驱(关键字是“56”)依次顶替空缺】

在这里插入图片描述

图4-4
  5、删除关键字“59”,删除后如图4-5所示。

  图中步骤②和步骤③,根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“64”)、后继的后继(关键字是“70”)依次顶替空缺】

在这里插入图片描述

图4-5
  6、删除关键字“58”,删除后如图4-6所示。

  图中步骤②和步骤③,根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“70”)、后继的后继(关键字是“72”)依次顶替空缺】

在这里插入图片描述

图4-6
  7、删除关键字“51”,删除后如图4-7所示。

  图中步骤②,是根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“52”)需要与父结点内的关键字(关键字是“56”)和右兄弟(关键字是“64、70”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数低过下限(五阶B树非根结点的关键字个数下限是2),需要继续调整合并】
  图中步骤③和步骤④,是根据B树删除规则中第①个【先用其直接前驱(关键字“50”(替代是先左后右))替代其位置】,替代后合并关键字“40、46、50、72”即可

在这里插入图片描述

图4-7
  8、删除关键字“89”,删除后如图4-8所示。

  图中步骤②和步骤③,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“72”)、前驱的前驱(关键字是“70”)依次顶替空缺】

在这里插入图片描述

图4-8
  9、删除关键字“11”,删除后如图4-9所示。

  图中步骤②和步骤③,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“9”)、前驱的前驱(关键字是“6”)依次顶替空缺】

在这里插入图片描述

图4-9
  10、删除关键字“4”,删除后如图4-10所示。

  图中步骤②,是根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“5”)需要与父结点内的关键字(关键字是“3”)和左兄弟(关键字是“1、2”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数低过下限(五阶B树非根结点的关键字个数下限是2),需要继续调整】
  图中步骤③,是根据B树删除规则中第①个【先用其直接前驱(关键字“23”(替代是先左后右))替代其位置】
  图中步骤④,是根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“40”)顶替空缺】

在这里插入图片描述

图4-10
  11、删除关键字“48”,删除后如图4-11所示。

  图中步骤②和步骤③,根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“50”)、后继的后继(关键字是“52”)依次顶替空缺】

在这里插入图片描述

图4-11
  12、删除关键字“25”,删除后如图4-12所示。

  图中步骤②,是根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“30”)需要与父结点内的关键字(关键字是“23”)和左兄弟(关键字是“9、12”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数低过下限(五阶B树非根结点的关键字个数下限是2),需要继续调整】
  图中步骤③,是根据B树删除规则中第①个【先用其直接前驱(关键字“40”(替代是先左后右))替代其位置】
  图中步骤④,是根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“46”)顶替空缺】

在这里插入图片描述

图4-12
  13、删除关键字“73”,删除后如图4-13所示。

  图中步骤②,是根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“72”)需要与父结点内的关键字(关键字是“70”)和左兄弟(关键字是“56、64”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数低过下限(五阶B树非根结点的关键字个数下限是2),需要继续调整】
  图中步骤③和步骤④,是根据B树删除规则中第①个【先用其直接前驱(关键字“46”(替代是先左后右))替代其位置】,替代后合并关键字“6、40、46、52”即可

在这里插入图片描述

图4-13
  14、删除关键字“43”,删除后如图4-14所示。

  图中步骤②和步骤③,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“40”)、前驱的前驱(关键字是“30”)依次顶替空缺】

在这里插入图片描述

图4-14
  15、删除关键字“70”,删除后如图4-15所示。

  图中步骤①,根据B树删除规则中第②个【删除后结点关键字的个数未低于下限,直接删除,无需任何处理】

在这里插入图片描述

图4-15
  16、删除关键字“50”,删除后如图4-16所示。

  图中步骤②和步骤③,根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“52”)、后继的后继(关键字是“56”)依次顶替空缺】

在这里插入图片描述

图4-16
  17、删除关键字“40”,删除后如图4-17所示。

  图中步骤②和步骤③,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“30”)、前驱的前驱(关键字是“23”)依次顶替空缺】

在这里插入图片描述

图4-17
  18、删除关键字“9”,删除后如图4-18所示。

  图中步骤②和步骤③,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“6”)、前驱的前驱(关键字是“5”)依次顶替空缺】

在这里插入图片描述

图4-18
  19、删除关键字“1”,删除后如图4-19所示。

  图中步骤①,根据B树删除规则中第②个【删除后结点关键字的个数未低于下限,直接删除,无需任何处理】

在这里插入图片描述

图4-19
  20、删除关键字“30”,删除后如图4-20所示。

  图中步骤②,是根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“44”)需要与父结点内的关键字(关键字是“23”)和左兄弟(关键字是“6、12”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数未低过下限(五阶B树根结点的关键字个数下限是1),无需继续调整】

在这里插入图片描述

图4-20
  21、删除关键字“5”,删除后如图4-21所示。

  图中步骤②,根据B树删除规则中第③个【右兄弟够借,则用当前结点的后继(关键字是“6”)顶替空缺】

在这里插入图片描述

图4-21
  22、删除关键字“56”,删除后如图4-22所示。

  图中步骤②,根据B树删除规则中第①个【先用其直接前驱(关键字“52”(替代是先左后右))替代其位置】
  图中步骤③和步骤④,根据B树删除规则中第④个【左兄弟够借,则用当前结点的前驱(关键字是“46”)、前驱的前驱(关键字是“44”)依次顶替空缺】

在这里插入图片描述

图4-22
  23、删除关键字“6”,删除后如图4-23所示。

  图中步骤②,是根据B树删除规则中第①个【先用其直接前驱(关键字“23”(替代是先左后右))替代其位置】和第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“12”)需要与父结点内的关键字(关键字是“23”)和左兄弟(关键字是“2、3”)进行合并,合并后导致根结点关键字数量-1,数量-1后根结点中关键字个数未低过下限(五阶B树根结点的关键字个数下限是1),无需继续合并】

在这里插入图片描述

图4-23

4.2、删除根结点示例

  关键字序列为(1,2,12,22,23,33,34,132,213,321,342,343,344,676,788,898,2323,5656,5659),其中绿色的图是在线可视化生成B树工具运行结果。这里是为了单独演示删除根结点操作步骤:
  1、B树插入这里不介绍,构建完成后如图4-24所示。
在这里插入图片描述

图4-24

  2、删除关键字“342”,删除后如图4-25所示。

  根据B树删除规则中第①个【先用其直接前驱(关键字“321”(替代是先左后右))替代其位置】和第③个【左兄弟够借,则用当前结点的前驱(关键字是“132”)、前驱的前驱(关键字是“34”)依次顶替空缺】

在这里插入图片描述

图4-25

  3、删除关键字“321”,删除后如图4-26所示。

  根据B树删除规则中第①个【先用其直接前驱(关键字“213”(替代是先左后右))替代其位置】和第③个【左兄弟够借,则用当前结点的前驱(关键字是“34”)、前驱的前驱(关键字是“33”)依次顶替空缺】

在这里插入图片描述

图4-26

  4、删除关键字“213”,删除后如图4-27所示。

  根据B树删除规则中第①个【先用其直接前驱(关键字“132”(替代是先左后右))替代其位置】和第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“34”)需要与父结点内的关键字(关键字是“33”)和左兄弟(关键字是“22、23”)进行合并,合并后导致父结点关键字数量-1,数量-1后父结点中关键字个数低过下限(五阶B树非根结点的关键字个数下限是2),需要继续合并】
  再次根据B树删除规则中第⑤个【左、右兄弟都不够借,则(当前结点剩余关键字“12”)需要与父结点内的关键字(关键字是“132”)和右兄弟(关键字是“676、2323”)进行合并,合并后无需继续合并】

在这里插入图片描述

图4-27

  以上就是B树删除的全部过程,涵盖了所有情况。


http://chatgpt.dhexx.cn/article/XUq5FcL0.shtml

相关文章

B树-多路平衡查找树

B树 B树一个m阶B树的具有的特征&#xff08;或必须满足的条件&#xff09;B树的查找B树插入元素(一定是在叶子节点插入)1.插入后&#xff0c;没有破坏B树的规则2.插入后&#xff0c;叶子节点元素超过m-1个 B树删除元素1.删除叶子节点上的元素&#xff0c;没有破坏规则2.删除叶子…

B树、B+树详解

B-树&#xff0c;即为B树。因为B树的原英文名称为B-tree&#xff0c;目前理解B的意思为平衡。 概念 首先&#xff0c;B树不要和二叉树混淆&#xff0c;在计算机科学中&#xff0c;B树是一种自平衡树数据结构&#xff0c;它维护有序数据并允许以对数时间进行搜索&#xff0c;顺…

【B树及B树的基本操作】

文章目录 1.B树的定义和特性2.B树的性质3.B树创建的过程。4.B树的删除5.总结 1.B树的定义和特性 B树是一种平衡的多路查找树。 一棵m阶的B树&#xff08;B树中所有结点的孩子个数的最大值为m)&#xff0c;或为空树&#xff0c;或为满足下列特性的m叉树&#xff1a; (1) 树中每…

B树和B+树的区别

文章目录 简述写在前面1、B树2、B树 深入浅出B树B树深入B-树的查找 B 树B树概述 B-树和B树的区别拓展&#xff1a;MySQL为什么使用B-Tree&#xff08;BTree&#xff09;&& 存储知识存储数据最小单元主存存取原理磁盘存取原理 总结 简述 写在前面 大家在面试的时候&am…

B树(B-树)详解

B-树&#xff0c;即为B树。因为B树的原英文名称为B-tree&#xff0c;而国内很多人喜欢把B-tree译作B-树&#xff0c;B-tree就是指的B树。 B-树容易让人误解,建议大家用B树称呼, 本文以下直称B树 这篇介绍概念, 优点应用等, B树的描述和增删改查请到隔壁我写的另一篇(篇幅较长…

数据结构 —— B树

文章目录 1、B树的定义1.1、B树的特性1.2、B树的高度1.3、性能分析1.4、B树的补充说明1.5 、B树、B-树 、B-tree、B tree的区别 2、B树的插入操作以5阶B树为例&#xff0c;介绍B树的插入操作&#xff0c; 3、 B树的删除操作以5阶B树为例&#xff0c;介绍B树的删除操作 4、B树相…

B树和B+树详解

B树、B树看这一篇就够了 [TOC](B树、B树看这一篇就够了) 引言B树什么是B树以及B树是怎么来的B树的基本性质B树的新增和删除B树的插入B树的删除 B树什么是B树以及为什么要有B树B树的基本性质B树的查找 B树与B树的比较B树的优势B树的优势两者的细节对比 B树与B树在实际代码中的应…

B-树(B树)详解

https://www.jianshu.com/p/7dedb7ebe033 具体讲解之前&#xff0c;有一点&#xff0c;再次强调下&#xff1a;B-树&#xff0c;即为B树。因为B树的原英文名称为B-tree&#xff0c;而国内很多人喜欢把B-tree译作B-树&#xff0c;其实&#xff0c;这是个非常不好的直译&#xf…

B树和B+树

目录 一、BST树到AVL树到B树的简介 1.1 BST树 --- 二叉排序树 1.2 AVL树 --- 平衡二叉树 1.3 B树 --- 平衡多路查找树 1.3.1 B树的查找结点过程 1.3.2 B树的添加结点过程&#xff08;和结点分裂过程&#xff09; 1.3.3 B树的删除结点过程 二、B树 2.1 B树和B树 一…

在群晖NAS部署_开源在线项目任务管理工具【dooTask】

一、dooTask简介 1.1、说明 Dootask 是一款由国人开源的轻量级在线项目任务管理工具&#xff0c;它提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时通讯IM&#xff0c;文件管理等功能。基于PHP与Vue编写&#xff0c;遵守AGPL3.0开源协议。 1.2、特…

软件项目管理的重点知识

软件项目管理的重点知识 1.软件项目管理概述 1.1项目是什么 项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。 1.2常见的项目 生活中的项目 生日聚会野餐活动集体婚礼 大项目 微软的操作系统阿波罗计划神州飞船计划鸿蒙操作系统开发一个网站运…

推荐八款好用的项目管理工具

要想取得项目成功&#xff0c;避不开包括计划、执行、监控等。使用项目管理工具可以帮助项目经理制定项目计划&#xff0c;监控项目执行&#xff0c;跟踪项目进度。 1、进度猫 进度猫是国产的一款项目管理工具以甘特图为向导&#xff0c;基于任务清单todolist&#xff0c;支持…

工程项目管理软件有哪些?这六款很好用!

工程项目管理软件哪个好用&#xff1f;这六款很不错&#xff01; 在现代社会中&#xff0c;软件已经成为了企业信息化、项目管理等方面必不可少的工具。尤其是对于工程项目管理而言&#xff0c;借助软件进行协同、计划、控制等方面的工作&#xff0c;已经成为了必要的手段。但…

项目管理-软件:国内外知名IT项目管理工具【Worktile、PingCode、Jira、Clarizen、禅道】

IT项目管理随着敏捷的普及&#xff0c;支持其开发模式的工具也越来越多。它和瀑布工具的巨大差异在于一个是任务管理模式&#xff0c;一个是需求驱动管理模式。在这里&#xff0c;我列出了在国内外最知名最好用的敏捷工具及其网站。IT项目管理&#xff0c;或者说研发管理软件是…

10款最佳项目管理工具推荐

1、进度猫 进度猫是一款以甘特图为向导的轻量级在线免费项目进度管理工具。 特点&#xff1a; 基于甘特图、进度管理、任务管理ToDo、在线思维导图、团队协作随时把控项目进度,让项目管理一目了然。 甘特图显示项目的进度和具体任务清单。 对未完成任务、已完成任务进行分类…

知乎热推 6 款在线项目管理工具测评

用了一段时间的项目管理工具后&#xff0c;简单的总结项目管理工具就是&#xff1a; 一个能够满足项目经理对项目资源&#xff08;人员、文件和时间&#xff09;的管理&#xff0c;同时提供了项目进度可视化展示和支持团队合作的平台工具。 在这里&#xff0c;对知乎上热推的几…

项目管理系统源码

项目管理系统源码 功能介绍&#xff1a; 1&#xff1a;权限管理 。 对公司人员&#xff0c;组织架构进行管理&#xff0c;对用户采用角色授权的方式控制结点、菜单权限 3&#xff1a;项目管理。 对一个项目可以进行分阶段&#xff0c;分任务…划分&#xff0c;对每个划分点…

说好求一款在线项目管理软件,你们为什么推荐钉钉?

作为一名整天被各种项目虐得发际线不断后移的项目经理&#xff0c;对于项目管理工具&#xff0c;我是认真的。然而&#xff0c;混迹某些交流群中&#xff0c;时不时碰到有人询问推荐在线项目管理工具&#xff0c;总有人出来说&#xff1a;钉钉。纳尼&#xff1f;钉钉在我眼里真…

如何在项目管理中使用PERT图

PERT是一个项目管理计划工具&#xff0c;用于计算实际完成项目所需的时间。PERT代表计划评估审查技术。PERT图表是用于计划项目内任务的工具 - 可以更轻松地安排和协调完成工作的团队成员。 PERT图表创建于20世纪50年代&#xff0c;旨在帮助管理美国海军的武器和防御项目的创建…

项目资源管理

目录 申明1. 核心概念2. 虚拟团队/分布式团队3. 规划质量管理3.1.1 输入3.1.2 工具和技术3.1.2.1 责任分配矩阵 3.1.3 输出 4. 估算活动资源4.1.1 输入4.1.2 工具与技术4.1.3 输出4.1.3.1 资源分解结构RBS 5. 获取资源5.1.1 输入5.1.2 工具与技术5.1.3 输出 6. 建设团队6.1.1 输…