B树的性质以及解决上溢和下溢

一、B树

        B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现。

        

        观察上边的B树结构,B树具有几个明显的特质:

                a:每个结点可以有多个元素,也可以有2个以上的分支;

                b:树比较矮;

                c:每个节点的子树高度一致;

二、B树的性质

        假设有一颗m阶的B树(m>=2)

                假设一个节点的存储元素个数为x:

                1:根节点:1 <=  x <= m-1;

                2:  非根节点: ┌ m/2 ┐ (向上取整)− 1 <=  x <= m − 1

                3:如果有子结点,子结点的个数:y=x+1

                        根结点: 2 <= y <= m;

                        非根节点:┌ m/2 ┐  <=  y <= m 

      比如 m = 3,2 ≤ y ≤ 3,因此可以称为(2, 3)树、2-3树
      比如 m = 4,2 ≤ y ≤ 4,因此可以称为(2, 4)树、2-3-4树
      比如 m = 5,3 ≤ y ≤ 5,因此可以称为(3, 5)树

三、B树的搜索

        1、先在根节点内部从小到大搜索元素;

        2、 如果命中,搜索结束;

        3、 如果未命中,再去对应的子结点搜索,重复步骤1

四、 元素添加

        新添加的元素必定是会添加到叶子结点

4.1、普通添加

        给定一颗4阶B树:

添加两个元素55,95

如果这个时候在往里添加一个元素97,这个时候右下角结点的元素个数将超过上限

这种现象称为上溢 overflow

4.2、 解决上溢

        上溢结点的元素个数必然为m,假设上溢结点最中间的元素为k,将[0,k-1] 和 [k+1,m-1] 位置的元素分裂成两个子结点,元素k和父结点结合。

        一次上溢解决后,可能会导致父结点也出现上溢情况,按照上述的方法解决即可。

所以新增元素97后就变成了

继续新增元素52,54后,继续处理上溢

五、删除元素

5.1、元素在叶子结点

        直接删除即可

删除元素30

5.2、元素在非叶子结点

        先找到前驱或者后驱元素,覆盖所需删除元素。再将原先的前驱或者后驱元素从叶子结点中删除。

        比如删除元素60

5.3、删除下溢

删除元素22,结点元素就只剩一个了。元素个数低于最低限制,这种现象称为下溢。underflow

解决下溢的方法有两种:

5.3.1 方法1

        我们知道,下溢元素节点的个数必然为 ┌ m/2 ┐-2。

        如果下溢结点的附近的兄弟结点的元素个数有至少┌ m/2 ┐个元素,那么就向兄弟结点借一个元素。

        

        a: 将父结点的元素b插入到下溢结点的起始位置;

        b: 用兄弟结点中的最大元素a代替父结点中的元素。

        

这种操作就是旋转

5.3.2 方法2

        如果兄弟结点的元素个数只有┌ m/2 ┐-1个元素

        a:将父结点的元素b挪下来跟左右结点进行合并。

        b:合并后元素结点个数为 ┌ m/2 ┐-1 + ┌ m/2 ┐-2 + 1= ┌ m/2 ┐+┌ m/2 ┐-2  不超过m-1

        c:这个操作可能会导致父结点下溢。

所以下边这个b树

删除元素22后:

六、其他

B树的在线生成模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值