目录
一、B树的基本原理
B树(B-Tree) 是一种自平衡的树数据结构,专为高效处理磁盘或数据库中的大量数据而设计。它的核心特性是每个节点可以包含多个键和子节点指针,通过控制每个节点的最小/最大键数量,确保树的高度始终为对数级别。
B树的定义(以m阶B树为例)
B树是一种多路搜索树,也被称为平衡多路查找树。与二叉搜索树不同,B树的每个节点可以拥有多个子节点和键值。B树的每个节点包含键值集合、子节点指针集合和一个平衡因子。键值集合按照从小到大的顺序排列,子节点指针集合按照左子节点、右子节点的顺序排列。平衡因子用于衡量节点的平衡性。
- 节点容量:B树的阶(Order)或分支因子(Branch Factor)通常用字母m表示,它定义了节点可以拥有的最大子节点数(即m个子节点)。因此,一个节点最多可以有m-1个键值。最少包含 m/2−1 个键(根节点除外)
- 子节点数:每个非叶子节点最多有 m个子节点,最少有 m/2个子节点
-
有序性:所有键在节点内按升序排列
-
平衡性:
- B树通过保持树的平衡性,确保所有叶子节点都在同一层,从而实现了高效的查找、插入和删除操作。
- 这种平衡性确保了所有查找、插入和删除操作的时间复杂度都是O(log n),其中n是树中元素的数量。
-
操作原理:
- 查找操作:从根节点开始,通过比较要查找的键与节点中的键,决定是继续在左子树还是右子树中搜索,直到找到目标键或到达叶子节点为止。
- 插入操作:找到合适的叶子节点,然后将新键插入该节点。如果插入后节点中的键的数量超过了m-1,则节点会分裂成两个节点,并将中间的键提升到父节点。如果父节点也满了,则继续向上分裂,直到根节点。如果根节点也分裂,则创建一个新的根节点,并包含分裂出的中间键。
- 删除操作:找到包含要删除键的节点,并从节点中移除该键。如果删除后节点中的键的数量少于要求的最小数量(⌈m/2⌉-1),则需要重新分配或合并节点。重新分配通常是从兄弟节点借键,合并则是将当前节点与兄弟节点合并,并可能将父节点中的键下移。
二、B树操作过程图形化演示
示例:构建一个3阶B树(每个节点最多2个键,3个子节点)
插入序列:[10, 20, 5, 6, 12, 30, 7, 17]
1. 插入10(根节点):
[10]
2. 插入20(直接填充根节点):
[10, 20]
3. 插入5(根节点已满,触发分裂):
[10]
/ \
[5] [20]
4. 插入6(插入到左子节点):
[10]
/ \
[5,6] [20]
5. 插入1