数据结构-B树
目录
警告
本文最后更新于 2022-06-08,文中内容可能已过时。
又称多路平衡查找树,规定B树的阶 $m$ 为每个结点的最大孩子数量。
- 每个结点最多 $m$ 个孩子。
- 若根结点不是叶结点,则至少有两个孩子。
- 除根结点外,每个非叶结点至少有 $\lceil \frac{m}{2} \rceil$ 个孩子。
- 结点中关键字从小到大排序,关键字两侧为指向孩子的指针。
- 关键字左侧指针指向的子树中的关键字均小于该关键字,右侧则大于。
- 所有叶结点在同一层,不存储信息(空结点)。
高度
对任意一棵包含 $n$ 个关键字、高度为 $h$、阶数为 $m$ 的B树(不考虑空的叶结点):
- 下界:每层关键字越多,则高度越矮。B树中每个结点最多有 $m$ 棵子树,$m-1$ 个关键字,所以
- 上界:每层关键字越少,则高度越高。B树中根结点最少1个关键字,非叶结点最少 $\lceil \frac{m}{2} \rceil$ 棵子树, $\lceil \frac{m}{2} \rceil-1$ 个关键字,所以
查找
- 查找结点。将结点信息读入内存。
- 结点中查找关键字。在结点关键字表中二分查找,未找到则查找对应子树。
- 若子树为空,则查找失败。
插入
- 定位。利用查找算法,找出插入该关键字的最底层中的某个非叶结点。
- 插入。除了根结点,每个结点的关键字个数都在区间 $[\lceil \frac{m}{2} \rceil-1,m-1]$ 内。若插入后的结点关键字个数在范围内,则可以直接插入,否则必须对结点进行分裂。
- 分裂。将待分裂结点从中间位置($\lceil \frac{m}{2} \rceil$)将其中的关键宇分为两部分,左部分包含的关键字放在原结点中,右部分包含的关键字放到新结点中,中间位置($\lceil \frac{m}{2} \rceil$)的结点插入原结点的父结点。若此时导致其父结点的关键字个数也超过了上限,则继续进行这种分裂操作,直至这个过程传到根结点为止,进而导致B树高度增1。
删除
- 定位。
- 删除。
- 借位。