B树,Balanced Tree,平衡的多叉树
图1-B树
一、B树特性
B数的特点主要是:
- 除叶子外,所有节点都附带关键字。
(关键字即索引,B树作为索引查找性能很高,是Oracle默认的索引类型) - 叶子均在底层,但底层叶子不携带关键字。关键字都在底层以上的层。
3、m是B树的阶数,即一个结点最多拥有的叉树。(意思就是结点的子不能太多也不能能太少)
根至少有两个子,非根结点关键字个数 j :
向上取整(m/2) - 1 <= j <= m-1
二、B树插入(此后省略最底层的叶)
- 插入的元素一定是插入底层的上一层(最下一层非叶层)
- 如果插入的元素刚好是在底层,则直接插入
图2 插入-1 - 如果插入的层,关键字数已满,则需要向上分裂:
比如将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
三、B树删除(此后省略最底层的叶)
删除操作比插入操作复杂一些
(1) 删除非终端结点(也就是底层非叶结点)的关键字:
用关键字的直接前驱或者直接后继和被删除关键字互换后,转换为对终端结点的删除。并保证不破坏B树结构[0.5*向上取整(m-2)<=j<=m-1]
注:
直接前驱,即比关键字小,且相差最近的子。
直接后继,即比关键字大,且相差最近的子。
(2) 删除终端结点的关键字:
【未完待续】
四、总结
B数的插入与删除总结