定义:一颗M阶的B树
1)根节点的孩子数为2~M;(关键字个数1~M-1)
2)非根节点的孩子数为[M/2]~M。[x]上限函数。(关键字个数M/2]-1~M-1)
3)所有的叶子节点都在同一层。
4)有y个孩子的非叶子节点,其拥有y-1个关键字元素,且其按由小到大顺序排列。
B树的插入(插入一个关键字元素):
思路:
1)在B树中Find此关键字是否存在,若不存在,则新元素一般插入叶子节点层,即插入某个叶子节点中。
2)若被插入叶子节点的空间足够的话,则直接插入即可。
3)若被插入叶子节点空间满了,以至于不能插入新元素,这时需要将此叶子节点进行分裂一分为二(最好对等,一半一半),并将中间大小的元素上移到其父节点中。
4)若其父节点满了,则重复上述工作,直到不用分裂节点为止。最坏的情况,是分裂到根节点,从而建立一个新的根节点,使树的高度增加一层(这里只有Find访问路径上的那些内部节点才有可能发生变化)。
B树的删除:
思路:
1)现在B树中Find中被删除元素是否存在,若存在,则在找到的节点中进行元素的删除。
2)对元素删除后,判断其是否有左右孩子,若有则上移孩子节点中相近元素到父节点中,一般是右孩子的最左边的元素,或左孩子中的最右边元素。若没有左右孩子,则无需操作。
3)若第2)步后,某些节点中关键字的数目小于[M/2]-1,这时要根据其兄弟节点是否丰满(是否大于[M/2]-1),采取不同的操作。若存在某些兄弟节点丰满,则可向父节点中借一元素,同时将最丰满节点的最左边或最右边的元素上移(还)到父节点中。若没有丰满的兄弟节点,则选取一个相邻的兄弟节点进行合并。首先将父节点中介于此元素和其要合并兄弟节点间的元素下移到其某子节点中,然后将这两个节点合并。
B树和B+树的区别: