数据库(二)

B树的删除

  1. 查找要删除的关键字target所在的节点和位置

  2. Case 1:如果target是在叶子节点直接删除关键字
    Case 2:如果target不是在叶子节点,则从“子孙节点”中找到比target大的最小关键字,将该关键字移到目标关键字节点并覆盖目标关键字。并在叶子节点中删除提上来的这个关键字。

  3. 调整B树

调整B树的算法

因为节点的关键字数量为ceil(m/2)-1<=n<=m-1

  1. 遍历B树如果有一个节点的关键字小于下限即(ceil(m/2)-1),则调整该节点
  2. 检查该节点的右兄弟节点关键字个数是否等于下限,如果不等于下限,则向右兄弟节点拿一个关键字
  3. 如果右兄弟节点等于,则坚持该节点左兄弟节点关键字是否等于下限,如果不等于下限,则向左兄弟节点拿一个关键字
  4. 2,3都不成立则合并节点
  5. 重复步骤一,直至B树不需要调整
    例:5阶B树,关键字范围[2,4]
    在这里插入图片描述
    1.删除21,叶子节点删除21后处于最小值直接删除
    在这里插入图片描述
    2.删除27,因为27不是在叶子节点,所以找到比27大的最小关键字,然后用该关键字覆盖27,并且删除该关键字
    在这里插入图片描述
    又因为当前节点小于2,而右兄弟节点等于最小值,所以将左兄弟节点拿一个key,所以父节点28下移,左兄弟节点26上移
    在这里插入图片描述
    接着删除32,因为删除32之后当前节点只有一个关键字而且兄弟节点也只有2个关键字,所以合并节点,将30下移到兄弟节点,并且31合并过去
    在这里插入图片描述
    删除40,因为当前节点为1,且兄弟节点都是等于2所以进行合并,36下移39合并到左兄弟节点
    在这里插入图片描述
    合并后当前节点也是1小于最小值,且兄弟节点等于最小值依旧进行合并,33下移41左移
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值