一、B树的定义
B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。
一颗m阶的B树定义如下:
1、每个结点最多有m-1个关键字。
2、根结点最少可以只有1个关键字。
3、非根结点至少有Math.ceil(m/2)-1个关键字。
4、每个结点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。
5、所有叶子结点都位于同一层,或者说根结点到每个叶子结点的长度都相同。
二、B树的插入操作插入操作是指插入一个关键字(也可以是一个复杂的自定义结构体)。如果B树中已存在需要插入的关键字,则不再插入。若B树不存在这个关键字,则一定是在叶子结点中进行插入操作。
1、根据要插入的关键字的值,找到叶子结点并插入。
2、判断当前结点关键字的个数是否小于等于m-1,若满足则结束,否则进行第3步。
3、以结点中间的关键字为中心分裂成左右两部分,然后将这个中间的关键字插入到父结点中,这个关键字的左子树指向分裂后的左半部分,这个关键字的右子支指向分裂后的右半部分,然后将当前结点指向父结点,继续进行第3步。
下面以4阶B树为例,介绍B树的插入操作,在4阶B树中,结点最多有3个关键字,最少有1个key关键字
1)在空树中插入38
2)继续插入21,40。此时关键字该个数仍小于小于等于m-1
3)继续插入96
插入后超过了最大允许的关键字个数3,所以以关键字值为40(中间节点38,40都可以)为中心进行分裂,结果如下图所示,分裂后当前结点指针指向父结点,满足B树条件,插入操作结束。