B代表平衡,表示在B树中,每个节点的左右两侧大致保持相同的大小(子节点数)。
考虑这个例子:
将数字添加到二叉树如下:如果新数字大于当前节点,则将其添加到右侧,否则以相同的方式添加到左侧(子)树。
A) 想想如果将 1 到 100 的数字按升序相加会发生什么。
B) 现在想象一下,如果像这样添加它们 50, 25, 75, 12, 37, 62, 87, ... 会发生什么(即从区间的中间开始,然后递归地添加新间隔)
B-trees 添加新节点的方式是,即使您按照 A) 中的顺序添加它们,生成的树也类似于从 B) 生成的树
对于磁盘访问,想象一下必须从 A) 和 B) 查找树中的节点 100 并比较您必须处理多少个节点(磁盘访问)才能到达它。
编辑
正如 cmets 中所指出的,上述 B 树的表示并不完全正确。
B-tree 更像是排序(节点)列表的树,也就是说,每个节点都包含一个排序的键列表(它是可变的但长度有限),每个键都引用一个子节点或叶(数据节点)。这使得树比平衡二叉树(这基本上是我上面描述的)更平坦。每个节点都可以被视为必须完整读取的数据块或数据页。由于树相对平坦,查找特定数据点必须读取的页面数量很少。在 B-tree 中查找的复杂性与平衡二叉树的复杂性相当(或者就此而言,在排序列表上进行简单的二叉搜索)。区别在于必须在一个步骤中处理的键/数据的数量。二叉树需要对每个级别的单个数据点进行一次读取操作,排序列表需要一次读取所有数据,而 B 树位于中间,需要每个级别的数据块。从一些操作的角度来看是无关紧要的,从内存访问的角度来看它是非常重要的。从磁盘读取数据时,块的大小不如所需的单独读取操作的数量重要(只要它受到限制)。