数据结构 B树系列

前言

B树基本规则

  1. 每个节点最多有m个子节点,其中m是一个正整数。根节点除外,其他节点至少有⌈m/2⌉个子节点。

  2. 每个节点中的键值按照非降序排列。对于节点中的键值k,如果有n个子节点,那么节点中的n-1个键值将把节点分为n个区间,第i个区间的键值小于k,第i+1个区间的键值大于等于k。

  3. 所有叶子节点位于同一层,且不包含任何键值信息,可以看作是外部存储的块。

  4. 每个非叶子节点中的键值个数比子节点个数少1。

  5. 每个节点中的键值个数满足:
    ⌈m/2⌉-1 <= 键值个数 <= m-1

![在这里插入图片描述](https://img-blog.csdnimg.cn/7608c2a7fa9a45efbafd86029ce6b7a1.png

B树的数据插入(文字描述+图解)

插入规则概览:

1.从根节点开始,按照节点中的键值进行比较,找到合适的叶子节点(比较结果类似于二叉搜索树)。

2.如果叶子节点中已经存在该键值,则更新相应的值。

3.如果叶子节点中不存在该键值,则将键值插入到叶子节点的合适位置,并保持节点中的键值有序。

4.如果插入键值后,叶子节点的键值个数超过了上限m-1,则进行分裂操作。

将叶子节点的键值分成两部分,左边部分包含⌈(m-1)/2⌉个键值,右边部分包含⌊(m-1)/2⌋个键值。

将右边部分的键值和对应的子节点分离出来,形成一个新的叶子节点。

将新的叶子节点插入到叶子节点的右边,并更新父节点的键值信息。

5.如果插入键值后,叶子节点的键值个数没有超过上限m-1,则直接插入。

6.如果父节点存在并且插入键值后超过了上限m-1,则进行分裂操作。

将父节点的键值分成两部分,左边部分包含⌈(m-1)/2⌉个键值,右边部分包含⌊(m-1)/2⌋个键值。

将右边部分的键值和对应的子节点分离出来,形成一个新的父节点。

将新的父节点插入到父节点的右边,并更新祖父节点的键值信息。

重复步骤6,直到根节点为止。

(图解)插入的情况归类为以下几种:

  1. 无父亲节点,不需要分裂;
    在这里插入图片描述

  2. 有父亲节点,不需要分裂;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弦化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值