B树相关操作以及B+树

假设对 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树类似,不做赘述

猜你喜欢

转载自blog.csdn.net/qq_43186095/article/details/104747496
今日推荐