B树定义
B树,称为多路平衡查找树。B树中所有结点的孩子结点树的最大值称为B树的阶,通常称为m。
一颗m阶B树或为空树,或为满足以下特性的m叉树:
1.树中每个结点至多有m棵子树(至多含有m-1个关键字)
2.若根结点不是终端结点,则至少有两颗子树
3.除根结点外的所有非叶结点至少有【m/2】棵子树。(至少含有【m/2】-1个关键字)【】是向上取整符号。
4.所有的叶结点都出现在同一层次上,并且不带信息
B树的查找
B树的具体查找步骤如下:
1.先让key与根结点中的关键字比较,如果key等于k[i](k[]为结点内的关键字数组),则查找成功
2.若key < k[1],则到p[0]所指示的子树中进行继续查找
3.若key > k[n],则到p[n]所指示的子树中进行继续查找
4.若k[i] < key < k [i+1],则到p[i]所指示的子树继续查找
5.如果最后遇到空指针,则证明查找不成功
B树的插入
对于关键字的插入,需要找到插入位置。在B树的查找过程中,当遇到空指针时,则证明查找不成功,同时也找到了插入位置,即根据空指针可以确定在最底层非叶结点中的插入位置。
为了方便,称最底层的非叶结点为终端结点。由此可见,B树结点的插入总是落在终端结点上。在插入过程中有可能破坏B树的特性,如果新关键字的插入使得结点中关键字的个数超过规定个数,这时要进行结点的拆分。
B树删除
对于关键字的删除,需要找到待删除关键字。在结点中删除关键字的过程中也可能破除B树的特性,如旧关键字的删除可能使得结点中关键字的个数少于规定个数,这时可能需要向其兄弟结点借关键字或者和其孩子结点进行关键字的交换,也可能需要进行结点的合并。其中,和当前结点的孩子结点进行关键字的操作可以保证删除操作总是发生在终端结点上。
更多请查看我的个人博客:https://beatjerome.github.io