1 B 树
在介绍 B + 树之前, 先简单的介绍一下 B 树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区别。
1.1 B 树概念
B 树也称 B - 树, 它是一颗多路平衡查找树。二叉树我想大家都不陌生,其实,B 树和后面讲到的 B + 树也是从最简单的二叉树变换而来的,并没有什么神秘的地方,下面我们来看看 B 树的定义。
每个节点最多有 m-1 个关键字(可以存有的键值对)。
根节点最少可以只有 1 个关键字。
非根节点至少有 m/2 个关键字。
每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。
所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同。
每个节点都存有索引和数据,也就是对应的 key 和 value。
所以,根节点的关键字数量范围:1 <= k <= m-1,非根节点的关键字数量范围:m/2 <= k <= m-1。
另外,我们需要注意一个概念,描述一颗 B 树时需要指定它的阶数,阶数表示了一个节点最多有多少个孩子节点,一般用字母 m 表示阶数。
我们再举个例子来说明一下上面的概念,比如这里有一个 5 阶的 B 树,根节点数量范围:1 <= k <= 4,非根节点数量范围:2 <= k <= 4。
下面,我们通过一个插入的例子,讲解一下 B 树的插入过程,接着,再讲解一下删除关键字的过程。
1.2 B 树插入
插入的时候,我们需要记住一个规则:判断当前结点 key 的个数是否小于等于 m-1,如果满足,直接插入即可,如果不满足,将节点的中间的 key 将这个节点分为左右两部分,中间的节点放到父节点中即可。
例子:在 5 阶 B 树中,结点最多有 4 个 key, 最少有 2 个 key(注意:下面的节点统一用一个节点表示 key 和 value)。
插入 18,70,50,40
插入 22