--- title: B Trees localeTitle: B树 --- ## B树 # 介绍 B-Tree是一种自我平衡的搜索树。在大多数其他自平衡搜索树(如AVL和红黑树)中,假设一切都在主存储器中。要理解B树的使用,我们必须考虑大量的数据,这些数据不适合主存。当键数很高时,以块的形式从磁盘读取数据。与主存储器访问时间相比,磁盘访问时间非常长。使用B-Trees的主要思想是减少磁盘访问次数。大多数树操作(搜索,插入,删除,最大,最小,..等)需要O(h)磁盘访问,其中h是树的高度。 B树是一棵肥胖的树。通过在B树节点中放置最大可能密钥,B树的高度保持较低。通常,B树节点大小保持等于磁盘块大小。由于B-Tree的h值较低,因此与平衡二进制搜索树(如AVL树,红黑树,等等)相比,大多数操作的总磁盘访问量显着减少。 B树的属性: 1)所有叶子处于同一水平。 2)B树由术语最小度't'定义。 t的值取决于磁盘块大小。 3)除root之外的每个节点必须至少包含t-1个密钥。 Root可能包含最少1个密钥。 4)所有节点(包括根)最多可包含2t - 1个密钥。 5)节点的子节点数等于其中的键数加1。 6)节点的所有密钥按递增顺序排序。两个键k1和k2之间的子包含范围为k1和k2的所有键。 7)B-Tree从根增长和缩小,这与二进制搜索树不同。二元搜索树向下生长,也从向下收缩。 8)与其他平衡二进制搜索树一样,搜索,插入和删除的时间复杂度为O(Logn)。 搜索: 搜索类似于二进制搜索树中的搜索。让要搜索的密钥为k。我们从root开始,递归地遍历。对于每个访问过的非叶节点,如果节点有密钥,我们只返回节点。否则,我们将重复到节点的适当子节点(就在第一个更大的键之前的子节点)。如果我们到达叶节点并且在叶节点中找不到k,则返回NULL。 穿越: 遍历也类似于二叉树的Inorder遍历。我们从最左边的孩子开始,递归地打印最左边的孩子,然后对剩余的孩子和钥匙重复相同的过程。最后,递归打印最右边的孩子。