B 树(B- 树)
概念
B 树是一棵 多路平衡查找树。其定义为(一般用 m 表示 B 树 的阶数):
- 每个节点最多有 m-1 个关键字
- 根节点最少可以只有 1 个关键字
- 非根节点至少有 m/2 个关键字
- 每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的关键字都小于它,每个关键字的右子树中的关键字都大于它
- 所有叶子节点都位于同一层
B 树的插入
判断当前节点 key 的个数是否小于等于 m-1,如果满足,直接插入到当前节点,如果不满足,根据节点中间的 key 将这个节点一分为二,中间的节点放到父节点中。若父节点 key 的数量也超出范围,向上继续分割,直至满足要求。
B 树的删除
- 若删除的 key 位于叶子节点且删除后当前节点 key 的个数仍满足要求,直接删除即可。
- 对于非叶子节点的删除,需要使用后继 key 覆盖要删除的 key,然后删除后继 key,并按照如下规则进行调整使得 节点 key 数量符合范围:
- 后继 key 所在的节点为叶子节点,若删除后节点 key 数量小于 m/2,且其兄弟节点 key 数量大于 m/2。将父节点 key 移动到该节点,然后将兄弟节点的 key 移动到父节点。