B树
B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:
-
树中每个结点至多有
m
棵子树,即至多含有m-1
个关键字 -
若根节点不是终端节点,则至少有两棵子树
-
除根节点外的所有非叶节点至少有
[m-2](向上取整)
棵子树,即至少含有[m-2]+1
个关键字。 -
所有的叶子节点都出现在同一层,并且不带信息(可以视为外部节点或类似于折半查找判定树的查找失败节点,实际上这些节点不存在,指向这些节点的指针为空)。
-
所有非叶节点的结构如下:
n P0 K1 P1 K2 P2 … Kn Pn 其中,
Ki(i = 1, 2, ..., n)
为节点的关键字,且满足K1<K2<...<Kn
;Pi(i = 0, 1, ..., n)
为指向子树根节点的指针,且指针Pi-1
所指子树中所有结点的关键字均小于Ki,Pi所指子树中所有结点的关键字均大于Ki,n([m-2] - 1 <= n <= m-1)
为结点中关键字的个数。
核心特性
-
根节点的 子树数 ∈ [ 2 , m ] 子树数\in[2, m] 子树数∈[2,m], 关键字数 ∈ [ 1 , m − 1 ] 关键字数\in[1, m-1] 关键字数∈[1,m−1]。
其他结点的 子树数 ∈ [ [ m − 2 ] , m ] 子树数\in[[m-2], m] 子树数∈[[m−2],m]; 关键字数 ∈ [ [ m − 2 ] − 1 , m − 1 ] 关键字数\in[[m-2]-1, m-1] 关键字数∈[[m−2]−1,m−1]。
-
对任一结点,其所有子树的高度都相同
-
关键字的值:子树0<关键字1<子树1<关键字2<子树2<…
B树与B+树的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-82FdtTFs-1679669556283)(C:\Users\17400\AppData\Roaming\marktext\images\2023-03-17-20-45-20-image.png)]
以上是一棵5阶B树
m阶B树:
-
结点中的n个关键字对应n+1棵子树
-
根节点的关键字数 n ∈ [ 1 , m − 1 ] n\in[1, m-1] n∈[1,m−1]。
其他节点的关键字数 n ∈ [ [ m / 2 ] − 1 , m − 1 ] n\in[[m/2]-1, m-1] n∈[[m/2]−1,m−1]。
m阶B+树:
-
结点中的n个关键字对应n棵子树
-
根节点的关键字数 n ∈ [ 1 , m ] n\in[1, m] n∈[1,m]。
其他节点的关键字数 n ∈ [ [ m / 2 ] − 1 , m ] n\in[[m/2]-1, m] n∈[[m/2]−1,m]。
-
B+树中,叶结点包含全部关键字,非叶节点中出现过的关键字也会出现在叶结点中
1, m]$。
- B+树中,叶结点包含全部关键字,非叶节点中出现过的关键字也会出现在叶结点中