我想知道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
答案 0 :(得分:1)
您可以阅读wikipedia
在AVL树中,任何节点的两个子子树的高度最多相差一个
这并不意味着你有一棵完整的树!请参阅链接的维基百科页面中的余额树示例。
因此,对于您提出的任何插入,插入后树仍将保持平衡(对于平衡的通用定义)
在根的一侧,你将拥有子树
5
4 6 height 2
3 # # #
在oder方面你会得到子树
9
8 # height 1
因为2个子树只有1的高度差,所以没关系......你可以检查所有节点的属性是否为真