假设对 1 7 6 5 3 2 4 8 9 构建3阶B树
B树的构建和删除节点的一个原则:坚决不能浪费指针域
构建过程
n阶B树
分裂节点的索引 = n/2 (向上取整)
每个节点存储元素个数 = n-1
删除节点
1、删除子节点
情况1
节点内元素数量 > n/2 (向下取整) ----> 直接删除
情况2
节点内元素数量 = n/2 (向下取整) 且兄弟节点 > n/2 (向下取整) ----> 采用平衡二叉树删除的方法
A>C>D
情况3
节点内元素数量 = n/2 (向下取整) 且兄弟节点都 = n/2 (向下取整) ----> 让父节点的其中一个元素变成子节点
2、删除父节点
情况1
选择子树中元素个数 > n/2 (向下取整) ----> 左子树最大值替换父节点
情况2
孩子数量都为1个
B+树
B树无论是叶子节点还是非叶子节点处都存储数据
B+树只在叶子节点存储数据,其余位置都代表索引,这样就可以腾出更多的空间来存储数据
B+树最强大的功能是范围查询,只需要沿着指针向下寻找即可,而B树则需要树的中序遍历,显然B树的查询效率很低,这也是为什么数据库采用B+树作为存储数据的结构
B+树插入删除操作与B树类似,不做赘述