概述

B 树是多路平衡树。一棵 m 阶 B 树需要满足如下性质:

接下来分析一棵有 n 个关键字的 m 阶 B 树的最大深度和最小深度:

B 树的深度直接影响插入节点、查找节点、删除节点的时间复杂度。


插入关键字

1,如果树为空,那么创建根节点,然后退出

2.1, 否则,令临时指针 node 指向根节点

2.2,设node 的关键字列表为 keywords、孩子节点列表为 children、keywords 的长度为 length,并执行下面的过程:

3,如果 node 的关键字个数超过 m - 1,则执行下面的流程:


查找关键字

B 树的查找是一个交叉查找的过程,其过程如下:

1,如果树为空,那么查找失败

2.1,否则,令临时指针 node 指向根节点

2.2,执行下面的过程


删除关键字

1, 找到待删除关键字 (deleted_node, deleted_index)

2,查找“真正”删除的节点和位置 (node, index)

3, 移除 node 中索引为 index 的关键字

4, 如果 node 是根节点

5,如果 node 的关键字个数小于 ceil(m / 2) - 1,那么按照如下的方式进行调整


Python 实现

tim-chow 的 Github