B-树 和 B+树
B-树
B-树是什么
-
每个结点最多有m个分支(子树);而最少分支数要看是否为根结点,如果是
根结点且不是叶子结点则至少有2个分支,非根非叶结点至少有⌈m/2⌉个分支。(向上取整 e.g. 5/2=3) -
有n(k≤n≤m)个分支的结点有n-1个关键字,它们按递增顺序排列。k=2(根结点)或⌈m/2⌉(非根结点)。
-
结点内各关键字互不相等。
-
叶结点处于同一层;可以用空指针表示,是查找失败到达的位置。
图为5阶B-树
B-树的查找
B-树的插入
如何变形
以下演示为5阶B-树演示
B-树的删除
以下可能有误 理解不深刻
如何变形
借值: 将其转移到自己的所在的节点
有分支
无分支
没分支就借兄弟节点
B+树
B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的B+树定义如下:
- 每个结点至多有m个子女
- 除根结点外,每个结点至少有[m/2]个子女,根结点至少有两个子女
- 有k个子女的结点必有k个关键字
B+树的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止。
B+树是B树的一种变形,比B树具有更广泛的应用,m阶B+树有如下 特征 :
- 每个结点的关键字个数与孩子个数相等,所有非最下层的内层结点的关键字是对应子树上的最大关键字,最下层内部结点包含了全部关键字
- 除根结点以外,每个内部结点有⌈m/2⌉到m个孩子
- 所有叶结点在树结构的同一层,并且不含任何信息(可看成是外部结点或查找失败的结点),因此,树结构总是树高平衡的
和B-树的区别
叶子节点存储所有关键字 B+树上增加了顺序访问指针,也就是每个叶子节点增加一个指向相邻叶子节点的指针 (数据库系统实现索引的首选数据结构)
除了叶子节点 其他节点的关键字只起到索引的作用
一个关键字对应一个分支 分支≤父关键字