一,基础概念
B树也是一种自平衡搜索树,常用于数据库中索引的实现。
B树和AVL树的区别在于:
B树是一种多路平衡查找树,B树的节点可以有两个以上的子节点(AVL树是二叉树,最多只能有两个子节点)。
B树的每个节点可以存储一个以上的数据域(在之前介绍过的树结构中,一个节点只有一个数据域)。由于B树的节点可以存放多条数据,因此B树特别适合应用在块存储的开发场景。
B树和AVL树的相同点在于:
B树的节点分布也是按照左小右大排列,子节点与节点的大小比较结果决定了子节点的位置。
每个节点中,左子树的数据比当前节点都小,右子树的数据比当前节点都大。
关于B树的阶:
M阶B树表示该树每个节点最多有M个子树。若B树中一个节点的子节点数目的最大值为4,则该树为4阶。
M阶B树可以定义为M路搜索树:
节点的最多子节点数为M。
节点的最大数据量为M-1。
所有非叶子节点(根节点除外)应该至少有M/2个子节点。
所有节点(根节点除外)应该至少有M/2-1条数据。
B树的阶数可以帮助我们确定节点在B树中可以容纳的子节点数。如果B树的阶数为3,则子节点的最小数量为2,最大数量为3,节点最多可以存放2个数据。类似地,如果B树的阶数为4,则子节点的最小和最大数量将分别为2和4,节点最多可以存放3个数据。
B树的基本结构:
B树的结构特点:
所有叶子节点都出现在同一水平高度。
B树是一棵扁平树,层数很小,B树的节点不再只存储一条数据。
B树节点内的所有数据必须按键值升序排列。
B树的设计原则就是,将尽可能多的数据放入B树的每个节点中,从而使B树的层数保持在最小值。由于不用遍历很多层节点,与其他平衡树相比,B树的访问速度更快。