【数据结构日记】(一) B树的插入和删除

B树,Balanced Tree,平衡的多叉树

一颗五阶B树
图1-B树

一、B树特性

B数的特点主要是:

  1. 除叶子外,所有节点都附带关键字。
    (关键字即索引,B树作为索引查找性能很高,是Oracle默认的索引类型)
  2. 叶子均在底层,但底层叶子不携带关键字。关键字都在底层以上的层。
    3、m是B树的阶数,即一个结点最多拥有的叉树。
    根至少有两个子,非根结点关键字个数 j :
    向上取整(m/2) - 1 <= j <= m-1
    (意思就是结点的子不能太多也不能能太少)

二、B树插入(此后省略最底层的叶)

  1. 插入的元素一定是插入底层的上一层(最下一层非叶层)
  2. 如果插入的元素刚好是在底层,则直接插入 图2 插入-1
    图2 插入-1
  3. 如果插入的层,关键字数已满,则需要向上分裂:
    比如将88插入这颗5阶B树。插入前,根节点的右子Node1,有关键字60,80,90,99,分为了(49,60),(60,80),(80,90),(90,99),(99,+∞)五个区间,也就是Node1有五叉。但是插入了88之后,就会把(80,90)变成两个区间,(80,88)和(88,90),多出来一个叉,就不符合了五阶B树的定义。因此需要向上分裂:
    在这里插入图片描述
    向上分裂:例如以中间关键字为界,分裂成两个子,再将中间关键字合并到其父。最后把父 按照相应的区间 连接子。
    如果做完向上分裂父的关键字也满了,那么可以再对 父的父 向上分裂
    图3 插入-2
    图3 插入-2

三、B树删除(此后省略最底层的叶)

删除操作比插入操作复杂一些

(1) 删除非终端结点(也就是底层非叶结点)的关键字:
用关键字的直接前驱或者直接后继和被删除关键字互换后,转换为对终端结点的删除。并保证不破坏B树结构[0.5*向上取整(m-2)<=j<=m-1]
注:
直接前驱,即比关键字小,且相差最近的子。
直接后继,即比关键字大,且相差最近的子。
(2) 删除终端结点的关键字:
【未完待续】

四、总结

B数的插入与删除
B数的插入与删除总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值