B树学习

一、什么是B树

B树又称多路平衡搜索树,多用于文件系统或数据库的实现。
B树有如下特点:

  • 结点中可以含有多个元素,且这些元素是有序的。
  • 拥有某些搜索二叉树的性质,比如红框中的元素均大于33,蓝框中的元素介于18到33之间。
  • 每个结点可以有多棵子树。
  • 平衡,所有结点的平衡因子为0。
  • B树的阶数为所有结点中孩子数的最大值,图中的树即为3阶B树。
    在这里插入图片描述

二、m阶(m >= 2)B树的性质

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

  1. 根结点中存储的元素个数:1 <= x <= m-1
  2. 非根结点,存储的元素个数:⌈m/2⌉-1 <= x <= m-1
  3. 如果某结点有子结点,则子结点个数 y = x+1
    1. 若该节点为根结点,则 2 <= y <= m
    2. 若该节点为非根结点,则 ⌈m/2⌉ <= y <=m

三、B树中的基本操作

1. 搜索
  • 先在结点内部从小到大搜索元素
  • 若命中搜索结束
  • 未命中再去对应的子结点中搜索元素,重复最开始的步骤。
2. 插入

新添加的元素必定添加到叶子节点,即最后一层的结点当中。
此时会有两种情况:

  1. 该结点插入新数后,结点中存储的元素个数没有超过m-1个,此时插入成功。
  2. 插入后,该结点发生上溢,即结点中存储的元素个数>m-1,此时需要对结点进行分裂。
  • 分裂的方法是在当前结点中,以⌈m/2⌉处的元素为分界点,分成两部分,⌈m/2⌉处的元素插入到父结点,剩余的左、右两部分接到原分界点元素的左右两侧。如果父结点因此上溢,则重复此操作,知道这个过程传递到根结点,根结点上溢,则回导致该B树的高度加1,这也是唯一使B树增高的方法。
      下图为5阶B树上溢分裂的情况。
      在这里插入图片描述
3. 删除
  • 若删除的元素在叶子结点中,则直接删除即可。
  • 若删除的结点在非叶子结点中,则需要执行以下步骤
  1. 找到该元素的前驱或后继元素
  2. 利用前驱或后继覆盖所需删除元素的值
  3. 把相应的前驱或后记删除。事实上非叶子结点的前驱或后继一定在叶子结点当中,所以我们删除的操作可以看作仍然是放生在叶子节点中。
    在这里插入图片描述
  • 在元素添加时会发生上溢现象,相应的,在元素删除时会发生下溢现象,即结点中的元素数 < ⌈m/2⌉-1。解决方法如下:
  1. 若兄弟结点中的元素个数 >= ⌈m/2⌉,则可借其最右边的元素。这种操作其实就是旋转。
    在这里插入图片描述
  2. 如果兄弟结点只有⌈m/2⌉-1个元素则需要将父结点中的元素挪下来,与左、右子结点合并生成新的结点,合并后的元素个数为 ⌈m/2⌉+ ⌈m/2⌉-2,不超过m-1
    在这里插入图片描述3. 此操作可能会导致父结点产生下溢,并且这种父结点的溢出依然使用这种方法解决,最终这种影响可能传播至根结点,最终可能会导致根结点的合并,导致树的高度减1,这也是唯一一种会使B树的高度减一。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值