【问题标题】:AVL tree perfect balancing issueAVL树完美平衡问题
【发布时间】:2015-04-28 01:42:52
【问题描述】:

我想知道 AVL 树重新平衡是否存在根本问题。根据几个教程,对于 AVL 插入,最多 2 次旋转它可以平衡。但是,这可能取决于所谓的平衡。关注link看树。

最初它有 6 个元素。假设我们将最后一个值插入为 3 或 4.5 或 5.5 或 6.5。无论如何,它将被插入底部的左侧。总共有 7 个元素树,为了完美平衡,我认为它只有 3 行。

这将强制新根为 6 或 6.5(如果我们插入 6.5)。我真的想不出一种在 2 次旋转内重新平衡它的方法。 如果我们只依赖“平衡”的定义,4-rows 仍然被称为平衡,但它会导致更多的搜索时间。

我错过了什么吗?

如果图片被删除,下面是文字版:

7 5 9 4 6 8 空槽 3 或 4.5 或 5.5 或 6.5

【问题讨论】:

    标签: avl-tree tree-balancing


    【解决方案1】:

    您可以在wikipedia上阅读

    在AVL树中,任意节点的两个子子树的高度最多相差1

    这并不意味着你有一棵完整的树!请参阅链接的维基百科页面中的余额树示例。

    因此,对于您建议的任何插入,您的树在插入后仍将是平衡的(对于平衡的通用定义)

    在根的一侧,您将拥有子树

          5
      4       6        height 2 
    3   #   #   #
    

    在 oder 方面,您将拥有子树

      9
    8   #              height 1
    

    因为这 2 个子树的高度差只有 1,所以没关系...您可以检查该属性是否适用于所有节点

    【讨论】:

    • 同意你的观点:根据 AVL 树的定义,它仍然是平衡的。我真正的问题是,当它深入时,这是否意味着很多空白点?
    • AVL 的“平衡”方面意味着空点的数量是有限的。这是在大量空白点(这会增加遍历时间)和进行大量旋转(这会增加插入时间)之间的一种折衷
    • 感谢 Amxx。我会买的。
    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多