freeCodeCamp/guide/chinese/algorithms/b-trees/index.md

2.2 KiB
Raw Blame History

title localeTitle
B Trees B树

B树

介绍

B-Tree是一种自我平衡的搜索树。在大多数其他自平衡搜索树如AVL和红黑树假设一切都在主存储器中。要理解B树的使用我们必须考虑大量的数据这些数据不适合主存。当键数很高时以块的形式从磁盘读取数据。与主存储器访问时间相比磁盘访问时间非常长。使用B-Trees的主要思想是减少磁盘访问次数。大多数树操作搜索插入删除最大最小..等需要Oh磁盘访问其中h是树的高度。 B树是一棵肥胖的树。通过在B树节点中放置最大可能密钥B树的高度保持较低。通常B树节点大小保持等于磁盘块大小。由于B-Tree的h值较低因此与平衡二进制搜索树如AVL树红黑树等等相比大多数操作的总磁盘访问量显着减少。

B树的属性 1所有叶子处于同一水平。 2B树由术语最小度't'定义。 t的值取决于磁盘块大小。 3除root之外的每个节点必须至少包含t-1个密钥。 Root可能包含最少1个密钥。 4所有节点包括根最多可包含2t - 1个密钥。 5节点的子节点数等于其中的键数加1。 6节点的所有密钥按递增顺序排序。两个键k1和k2之间的子包含范围为k1和k2的所有键。 7B-Tree从根增长和缩小这与二进制搜索树不同。二元搜索树向下生长也从向下收缩。 8与其他平衡二进制搜索树一样搜索插入和删除的时间复杂度为OLogn

搜索: 搜索类似于二进制搜索树中的搜索。让要搜索的密钥为k。我们从root开始递归地遍历。对于每个访问过的非叶节点如果节点有密钥我们只返回节点。否则我们将重复到节点的适当子节点就在第一个更大的键之前的子节点。如果我们到达叶节点并且在叶节点中找不到k则返回NULL。

穿越: 遍历也类似于二叉树的Inorder遍历。我们从最左边的孩子开始递归地打印最左边的孩子然后对剩余的孩子和钥匙重复相同的过程。最后递归打印最右边的孩子。