当前位置: 首页 > news >正文

完整教程:数据结构——四十九、B树的删除与插入

文章目录

  • 前言
  • 一.B树的插入
    • 1.思路
    • 1.从0开始建立5阶B树
      • 1.插入元素为超过结点容纳上限
      • 2.插入元素超出结点容纳上限且分裂后没有父结点没有超出上限
      • 3.插入结点且分裂后其父结点也超出上限
  • 二.B树的删除
    • 1.思路
    • 2.具体例子
      • 1.删除终端结点的关键字且删除后当前结点所含元素未低于下限
      • 2.删除非终端结点的关键字且删除后当前结点所含元素未低于下限
      • 3.删除终端结点的关键字且删除后当前结点所含元素低于下限且有兄弟大于下限
      • 4.删除终端结点的关键字且删除后当前结点所含元素低于下限且所有兄弟都等于下限
  • 三.知识回顾与重要考点
  • 结语

前言

保持节点关键字数量的平衡。当插入导致节点关键字超过上限时,会进行分裂:中间关键字提升到父节点,左右部分形成新节点。若父节点也超限,则继续向上分裂,可能导致树高增加。以5阶B树为例,演示了从初始插入到节点分裂的全过程,包括如何确定插入位置、处理节点分裂以及关键字提升等关键步骤。所有插入操作都在最底层终端节点进行,确保B树特性得以维持。就是B树插入处理的核心

一.B树的插入

1.思路

  • 在插入key后,若导致原结点关键字数超过上限,则从中间位置(⌈ m / 2 ⌉ \lceil m/2\rceilm/2)将其中的关键字分为两部分,左部分涵盖的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置(⌈ m / 2 ⌉ \lceil m/2\rceilm/2)的结点插入原结点的父结点, 若此时导致其父结点的关键字个数也超过了上限,则继续进行这种分裂操作,直至这个过程传到根结点为止,进而导致M树高度增1。
  • 如果一个关键字它源于分裂需要把它提到父节点当,那么我们应该把这个关键字放到它所属的节点的这条指针,所对应的这个点右边的位置
    在这里插入图片描述
  • 插入到最底层“终端节点”,用“查找”来确定插入位置,这样才能满足B树的失败结点只出现在最下面一层就是新元素一定

1.从0开始建立5阶B树

1.插入元素为超过结点容纳上限

  1. 插入第一个元素25,直接放在根节点中
    在这里插入图片描述
  2. 接下来插入第二个元素38,那38要比25更大,所以我们放在25后面
    在这里插入图片描述
  3. 再往后插入元素49放到38的后面
    在这里插入图片描述
  4. 通过接下来要插入的元素是60,60比49更大所以大家把它放在49的后面,此时根节点能够存放的元素已经到达了上限
    在这里插入图片描述

2.插入元素超出结点容纳上限且分裂后没有父结点没有超出上限

  1. 插入80,则会超出最大个数限制
    在这里插入图片描述
  2. 此时应该将该结点分裂为两个结点
    在这里插入图片描述
  3. 90肯定要插入到49,右边的指针所指的这个节点当中就是接下来我们要插入90这个元素,那从根节点出发,90要大于49,而49的右边已经没有别的关键字了于
    在这里插入图片描述
  4. 接下来检查这个节点中的关键字,60要小于90,80也要小于90,所以90应该插入到80的后面
    在这里插入图片描述
  5. 接下来我们插入99,和之前一样的操作
    在这里插入图片描述
  6. 再往后大家要插入88这个元素,和之前一样的操作,本来应该插入到80的后面
    在这里插入图片描述
  7. 此时该节点已经超出上限,则得分裂该结点,将中间元素88提到根节点中,然后把左右两个部分的元素分为两个新结点
    在这里插入图片描述
  8. 接下来插入83和87
    在这里插入图片描述
  9. 接下来要插入的节点是70,应该插入的位置是60和80的中间
    在这里插入图片描述
  10. 此时发现已经超出上限,则分裂它,由于需要保证其父节点当中的这些各个元素是有序的,因此插入到49和88中间
    在这里插入图片描述
  11. 接下来我们再插入三个元素,92,93,94
    在这里插入图片描述
  12. 很显然,又要分裂
    在这里插入图片描述

3.插入结点且分裂后其父结点也超出上限

  1. 继续插入73,74,75
    在这里插入图片描述
  2. 很显然,又要分裂
    在这里插入图片描述
  3. 这就导致了父结点需要分裂
    在这里插入图片描述

二.B树的删除

1.思路

  • 若被删除关键字在终端节点,则直接删除该关键字(要注意节点关键字个数是否低于下限⌈ m / 2 ⌉ − 1 \lceil m/2\rceil-1m/21

  • 若被删除关键字在非终端节点,则用直接前驱或直接后继来替代被删除的关键字
    直接前驱:当前关键字左侧指针所指子树中“最右下”的元素
    直接后继:当前关键字右侧指针所指子树中“最左下”的元素

  • 对非终端结点关键字的删除,必然可以转化为对终端结点的删除操作

  • 兄弟够借。若被删除关键字所在结点删除前的关键字个数低于下限,且与此结点右(或左)兄弟结点的关键字个数还很宽裕,则需要调整该结点、右(或左)兄弟结点及其双亲结点(父子换位法)
    右兄弟很宽裕时,用当前结点的后继、后继的后继来填补空缺
    左兄弟很宽裕时,用当前结点的前驱、前驱的前驱来填补空缺

    在这里插入图片描述

  • 兄弟不够借。若被删除关键字所在结点删除前的关键字个数低于下限,且此时与该结点相邻的左、右兄弟结点的关键字个数均=「m/2」-1,则将关键字删除后与左(或右)兄弟结点双亲结点中的关键字进行合并

2.具体例子

在这里插入图片描述

1.删除终端结点的关键字且删除后当前结点所含元素未低于下限

  1. 第一个要删除的元素是60该元素,由于60这个元素是在终端节点当中,并且删除60之后,当前被删除的这个节点,它的关键字个数并没有低于2
    在这里插入图片描述

2.删除非终端结点的关键字且删除后当前结点所含元素未低于下限

  1. 删除80,找出80这个元素的直接前驱或者直接后继来顶替80的位置
    1. 如果用直接前驱(当前关键字左侧指针所指子树中“最右下”的元素)77来顶替,然后将原本的77删除
      在这里插入图片描述
    2. 要是用直接后继(当前关键字右侧指针所指子树中“最左下”的元素)82来顶替,继而将原本的82删除
      在这里插入图片描述

3.删除终端结点的关键字且删除后当前结点所含元素低于下限且有兄弟大于下限

  1. 删除38
    在这里插入图片描述
  2. 当前节点已经低于下限,观察其右兄弟里边关键字的数量还够,因此让他的父结点第一个的元素49进入到当前结点
    在这里插入图片描述
  3. 然后让兄弟中第一个的元素70去顶替父节点中空缺的位置
    在这里插入图片描述
  4. 删除90
    在这里插入图片描述
  5. 发现其已经低于下限且右兄弟节点元素不足以借给它(借给它就会低于下限),因此看它的左兄弟,发现其节点元素充足,因此因此将其父结点的第一个元素给当前节点
    在这里插入图片描述
  6. 再用左兄弟节点的最后一个元素顶替父节点空缺的位置
    在这里插入图片描述

4.删除终端结点的关键字且删除后当前结点所含元素低于下限且所有兄弟都等于下限

  1. 删除49
    在这里插入图片描述
  2. 所有兄弟拥有的元素个数都等于下限,此时将当前结点和兄弟结点进行一个合体,除了这两个节点之外大家还要求把这两个节点它们中间的这个关键字(两个指针中间夹着的关键字)给一起合并到一个节点当中
    在这里插入图片描述
  3. 发现其父节点又低于下限了,按照之前的情况分类,接下来大家还需要把这个节点还有他的右兄弟进行一个合并
    在这里插入图片描述
  4. 此时根节点没有任何关键字,因此将其删除
    在这里插入图片描述

三.知识回顾与重要考点

在这里插入图片描述

非终端节点被删除都是被直接前驱或直接后继替代(转化为了对终端节点的删除),因此不可能出现低于下限的情况

结语

五更

假设想查看更多章节,请点击:一、数据结构专栏导航页

http://www.jsqmd.com/news/112393/

相关文章:

  • 2025年专注力培训中心推荐:专注力培训专业公司有哪些? - 工业推荐榜
  • 2025年口碑好中央空调哪家好品牌排行榜,实力强中央空调选哪家好公司推荐 - myqiye
  • 网络聊天器,前端wxpython,后端c++
  • 2025年珠海硬盘恢复维修权威推荐榜单:固态恢复/HP数据恢复/内存卡维修精选 - 品牌推荐官
  • 在Kubernetes(k8s)环境中无法删除持久卷(PV)和持久卷声明(PVC)
  • 2025年江苏小程序开发怎么做服务权威推荐榜单:微信小程序开发展会/小程序开发设计服务商/小程序开发渠道精选 - 品牌推荐官
  • 2025年淄博滨州潍坊济南抖音运营团队推荐,抖音运营团队哪家便宜全解析 - mypinpai
  • Xhorse VVDI MLB Tool: Solder-free Adapter + 5pcs Audi MLB Keys for EU/US Mechanics Owners
  • 详细介绍:Dubbo 全解析:从入门到精通的分布式服务框架实战指南
  • 【2025最新】Watt Toolkit下载安装教程:从安装到网络加速,一文讲透全流程 - PC修复电脑医生
  • PyCharm自定义注释模板
  • 2025年水镁石粉生产企业年度排名:哪家合作案例多? - 工业品牌热点
  • 深入解析:GSV5100B@ACP#一种具有音频提取和插入功能的 2 进 2 出 HDMI2.0 中继器 / CAT 延长器
  • 2025年燃气灶厂家权威推荐榜单:灶盘/煤气炉/煤气灶源头厂家精选 - 品牌推荐官
  • 2025年氯化钙粉厂家权威推荐榜单:氯化钙片/二水氯化钙/无水氯化钙源头厂家精选 - 品牌推荐官
  • 2025年燃气灶制造厂权威推荐榜单:煤气炉/煤气灶/炉具源头制造厂精选 - 品牌推荐官
  • 注册表中以 Windows. 开头 的 Shell 命令通常用于 右键菜单、控制面板项、系统设置 等功能的快速调用
  • 2025年12月螺栓球网架,加油站网架,大型网架厂商推荐:聚焦企业综合实力与核心竞争力 - 品牌鉴赏师
  • 2026年烟台威海英格索兰空压机配件销售服务商优选推荐:空压机维保/空压机余热回收/空压机管路改造服务商 - 工业企业赋能社
  • 垂直深耕,效率革新:BillusAI AI设计工具、AI设计软件实测测评 - 一搜百应
  • (2025)山东烟台海阳英格索兰空压机设备维保服务商推荐用分析报告 - 工业企业赋能社
  • 水蛭素哪个品牌最可靠效果好?水蛭素十大品牌排行榜,中老年人群专用 - 博客万
  • 2025年短视频推广公司排名:短视频推广哪家可靠? - mypinpai
  • 2025年佛山PVC塑料瓦品牌供应商推荐,源头PVC塑料瓦厂家全解析 - 工业推荐榜
  • 2025年佛山PVC天沟水槽专业厂家TOP5排行榜,批量定制与服务商家测评推荐 - 工业品牌热点
  • 2025年12月网架,球形网架,大跨度网架公司推荐:行业测评与选型指南 - 品牌鉴赏师
  • 2025年12月网架,球形网架,大跨度网架公司推荐:行业测评与选型指南 - 品牌鉴赏师
  • 2025年水镁石粉制造工厂年度排名:看哪家产品性价比高? - 工业品牌热点
  • 青岛直播带货公司 推荐君哲互联 - 博客万
  • 2025保温耐火材料企业TOP5权威推荐:安泰恒信,聚焦海泡石细分领域的实力角逐 - myqiye