AVL树完美平衡问题

时间:2015-04-28 01:42:53

标签: avl-tree tree-balancing

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

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

这将强制新的root为6或6.5(如果我们插入6.5)。我真的无法找到一种在2轮内重新平衡它的方法。 如果我们只依赖于“平衡”定义,那么4行仍称为平衡,但会产生更多的搜索时间。

我错过了什么吗?

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

                               7
              5                                9
           4     6                         8        Empty_slot
       3 or 4.5 or 5.5 or 6.5

1 个答案:

答案 0 :(得分:1)

您可以阅读wikipedia

  

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

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

因此,对于您提出的任何插入,插入后树仍将保持平衡(对于平衡的通用定义)

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

      5
  4       6        height 2 
3   #   #   #

在oder方面你会得到子树

  9
8   #              height 1

因为2个子树只有1的高度差,所以没关系......你可以检查所有节点的属性是否为真