【问题标题】:Balanced Binary Search Tree for numbers数字的平衡二叉搜索树
【发布时间】:2013-05-21 21:30:19
【问题描述】:

我想为从 1 到 20 的数字绘制一个平衡的二叉搜索树。

             _______10_______
            /                \
        ___5___                15
       /       \             /    \
      3         8          13      18
     / \       / \        /  \     /  \
    2   4     7   9     12    14  17    19
   /          /          /        /     
   1         6          11       16

上面的树是否正确且平衡?

【问题讨论】:

    标签: binary-tree binary-search-tree


    【解决方案1】:

    在回答您关于是否需要先计算高度的原始问题时,不,您不需要。您只需要了解平衡树是最高节点和最短节点之间的高度差为零或一的树,实现这一点的最简单方法是确保在填充时始终选择可能列表的中点子树中的顶部节点。

    您的示例树是平衡的,因为所有叶节点都位于底部或次底部级别,因此任何两个叶节点之间的高度差最多为 1。

    要从数字 1 到 20(含)创建一个平衡树,您只需将根条目设为 10 或 11(这些数字的中点为 10.5),以便任一子树中的数字数量相等。

    然后对每个子树递归地执行此操作。在10的下边,5是中点:

               10
              /  \
             5    11-thru-19 sub-tree
            / \
    1-thru-4   6-thru-9
    sub-tree   sub-tree
    

    只要扩展它,你就会得到类似的东西:

             _______10_______
            /                \
        ___5___               15
       /       \             /  \
      2         7          13    17
     / \       / \        /     /  \
    1   3     6   8     11    16    18    <- depth of highest leaf node
         \         \      \           \
          4         9      12          19 <- depth of lowest leaf node
                                                         ^
                                                         |
                                                   Difference is 1
    

    中点可以在高于和低于该数字的数量之差为 1 或 0 的数字处找到。对于从 1 到 20 的整个数字列表,有 9 个小于 10 和 10 个大于 10(或者,如果您选择 11 作为中点,数量是 10 和 9)。

    您的样本和我的样本之间的差异可能与我更喜欢通过四舍五入来选择中点的事实有关(这意味着我的右子树往往“更重”)。因为你的左子树更重,你似乎已经四舍五入了。

    选择10作为初始中点后,左子树没有余地,你必须选择5,因为它上面和下面有四个。任何其他中点将导致两半之间的差异至少为 2(例如,选择 4 作为中点将具有大小为 3 和 5 的两半)。这仍然可以您提供一个平衡的子树,具体取决于数据,但选择中点“更安全”。

    【讨论】:

    • 怎样才能找到中点?有什么算法可以找到吗?
    • @user,我添加了一个注释,说明数字作为中点的含义。
    猜你喜欢
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多