特征
1. B树是一棵 多叉 && 平衡 && 搜索 树(B树中每个节点可以有多个Key,也有多个孩子)
2. B树的每个节点在实现时都要人为规定Key的上限(KEY_LIMIT = ?)
3. B树每一个节点中的Key都是按照Key的大小顺序保存的(线性结构)
4. B树中所有路径(从根到叶子)的长度完全一样
5. B树的高度增长是由分裂导致的,是朝上生长的,一旦高度变化所有子树的高度同一变化
6. 节点中Key的个数记为size,则child的个数一定是size+1
B树的操作
1. 查找操作
2. 插入操作
1. 所有的插入操作,只能发生在叶子结点上
2. 插入时,每个节点的Key的数量是有上限的
完成插入后:1)未达上限,插入结束
2)达到上限,需进行“结点分裂”过程
分裂会生成新的数据,用一个类InsertResult来描述
3. 结点分裂过程
插入举例:
找插入位置
分裂会生成新节点
分为两种情况:当前分裂的节点是根节点或不是根节点
如果current是根节点,代表current没有parent,生成一个新节点root保存r.key,让current和r.node.parent的父节点都指向root
如果current不是根节点,此时的插入对象是current.parent,插入方法是insertKeyWithChild(r.key, r.node)