一,B树(Binary Search Tree)
B树即二叉搜索树,二叉排序树或者是空树,或者是满足如下性质的二叉树:
1,若它的左子树非空,则左子树上所有节点的关键字小于根节点的关键字。
2,若它的右子树非空,则右子树上所有节点的关键字大于根节点的关键字。
3,左、右子树本身又各是一颗二叉排序树。
二,B-树
1,B-树的定义
B-树称为多路平衡查找树,是一种组织和维护外存文件系统非常有效的数据结构。B-树是所有节点的平衡因子均为0的多路查找树。B-树中所有节点的孩子节点最大值称为B-树的阶,通常用m表示。一颗B-树或者是一颗空树,或是满足下面要求的m次树:
(1),叶节点:
所有的叶子节点在同一层,并且不带信息。(这里的叶节点就是NULL节点)
(2),根节点
根节点或者没有子树,或者至少有两棵子树。
(3),非叶节点的子树的个数
至少有m / 2棵子树,至多有m - 1棵子树。
(4),非叶节点包含的信息
包含所有的关键字及指向相关记录的指针。
2,B-树的查找
在B-树中查找指定关键字的方法类似于二叉排序树上的查找,不同的是在每个记录上确定向下查找的路径不一定是二路的,而是多路的。因为一个节点内的关键字的序列是有序的,在一个节点内查找关键字可以使用顺序查找与折半查找。在一棵B-树上查找关键字k的方法为:将k与根节点中的 ki 进行比较
(1),若 k = ki,查找成功。
(2),若 k < k1,顺着指针p0所指的子树继续查找。
(3),若 ki < k <ki+1, 顺着指针pi所指的子树继续查找。
(4),若 ki > kn,顺着指针pn所指的子树继续查找。
3,B-树的特性
(1),关键字集合分布在整棵树中。
(2),任何一个关键字出现且只出现在一个节点中。
(3),搜索有可能在非叶子节点结束。
(4),其搜索性能等价于在关键字全集内做一次二分查找。
三,B+树
1,B+树的定义
B+树是B-树的一种变体,也是一种多路搜索树。一棵m阶B+树满足下面这些条件:
(1),叶节点:
叶子节点包含全部关键字及指向相应记录的指针,而且叶子节点按关键字大小顺序链接。
(2),根节点:
根节点或者没有子树,或者至少有两棵子树。
(3),非叶节点的子树的个数
至少有m / 2棵子树,至多有m棵子树。
(4),非叶节点包含的信息
仅包含它的各个子节点中最大关键字及指向子节点的指针。
2,B+树的特性
(1),所有的关键字都出现在叶子节点的链表中,且链表中的关键字是有序的。
(2),不可能在非叶子节点命中。
(3),非叶子节点是叶子节点的索引,叶子节点相当于存储数据的数据层。
(4),更适合文件索引系统。
四,B-树与B+树之间的区别
1,叶节点
B-树:所有的叶子节点在同一层,并且不带信息。
B+树:叶子节点包含全部关键字及指向相应记录的指针。
2,非叶节点的关键字的个数
B-树:至少有m / 2 - 1个关键字,至多有m - 1个关键字。
B+树:至少有m / 2个关键字,至多有m个关键字。
3,非叶节点保存的信息
B-树:包含所有的关键字及指向相关记录的指针。
B+树:包含它的各个子节点中最大关键字及指向子节点的指针。
4,结构上的差别
B+树中所有的叶子节点都是通过指针链接在一起,而B-树不会这样做。
五,B-树与B+树各自的优点
1,B-树的优点
(1),对于在内部节点的数据,可以直接得到,不用根据叶子节点来定位。
2,B+树的优点:
(1),非叶节点不带有指向记录的指针,一个块中可能容纳更多的索引项。这样做一方面可以降低树的高度,另一方面可以定位更多的叶子节点。