概述
B树就是平衡树(balancetree)
B树与B+树的对比
名称 | B树(多路平衡查找树) | B+树 |
示意图 | ![]() | ![]() |
原型 | 由二叉树演变而来的,m查找树 | 由分块查找演变而来的,多级分块查找 |
关键字 | 根节点关键字范围【1,m-1】 | 根节点关键字范围【2,m】 |
分支数 | n个关键字对应,n+1个分支 | n个关键字对应,n个分支 |
分支范围 | 根节点【2,m】,其他节点【m/2,m】 | |
记录信息 | 所有节点都有 | 只有叶子节点包含 |
顺序查找 | 不支持 | 支持 |
查找过程 | 可能停留在任意节点,查找不稳定 | 结束时只能停留在叶子节点,查找速度稳定 |
原则 | 每个节点内部有序,树始终平衡。 | 应用在关系型数据库的索引 |
B树的插入
如果插入导致字数上限,那么就会从中间位置分裂成两个部分,右边部分放新结点,左边部分放原节点,中间位置放入原节点。
如下图,要插入90
插入90之后
B树的删除
删除的关键字:
判断是否低于下限(即上关键字最多m-1,最少m/2)
不是,直接删除
是,从左右兄弟那借
判断删除关键字是否在终端节点
是,判断下限,再删除
不是,将后继节点移动到需要删除的节点处,再删除。
ps:那借了兄弟节点之后,还有节点存在小于m/2的,又需要往大于m/2的节点处借。
这篇博文讲的很详细,可以直接看B树B+树,参考博文
简而言之,删除树的操作就是,根节点直接删,不够左右借,借不够,把自己合并过去。删除不是根节点,需要选节点来替代被删除的节点,即可删除。
总结
- 单一节点存储元素更多,使得每一次查询能拿到更多的数据。所以常用于数据库底层结构。
- B+树的所有查询都会查询到叶子节点,所以是稳定的。
- 删除和插入操作,需要时刻满足m/2<节点数量<m-1,记住不够借,借没有合并。