3

假设我有一个 B 树,其节点采用 3-4 配置(3 个元素和 4 个指针)。假设我按照规则合法地构建了我的树,我是否有可能达到一层中有两个节点,一个节点有 4 个退出指针而另一个节点只有两个退出指针的情况?

一般来说,我对正确使用的 B-Tree 的平衡性有什么保证

4

1 回答 1

11

平衡背后的想法(通常是平衡树数据结构)是任何两个子树之间的深度差异为零或一(取决于树)。换句话说,用于查找叶节点的比较次数总是相似的。

所以是的,你最终可能会遇到你描述的情况,仅仅是因为深度是相同的。每个节点中的元素数量与平衡无关(但见下文)。

这是完全合法的,即使左侧节点中的项目多于右侧节点(未显示空指针):

                 +---+---+---+
                 | 8 |   |   |
                 +---+---+---+
        ________/    |
       /             |
      |              |
+---+---+---+  +---+---+---+
| 1 | 2 | 3 |  | 9 |   |   |
+---+---+---+  +---+---+---+

但是,拥有 3-4 个 BTree 是非常不寻常的(有些人实际上会说这根本不是BTree,而是其他一些数据结构)。

使用 BTrees,您通常在每个节点(例如,4-5 棵树)中最多有偶数个键,以便更容易拆分和组合。对于 4-5 树,当节点填满时决定提升哪个键很容易 - 它是五个中的中间一个。对于 3-4 树来说,这不是一个明确的问题,因为它可能是两个之一(四个元素没有明确的中间)。

它还允许您遵循节点应包含在n2n元素之间的规则。此外(对于“正确的”BTrees),叶子节点都处于相同的深度,而不仅仅是彼此之间。

如果您将以下值添加到空 BTree,您最终可能会遇到您描述的情况:

Add           Tree Structure
---          ----------------
 1                  1

 2                 1,2

 5                1,2,5

 6               1,2,5,6

 7                  5
                   / \
                1,2   6,7

 8                  5
                   / \
                1,2   6,7,8

 9                  5
                   / \
                1,2   6,7,8,9
于 2010-10-17T04:55:05.860 回答