AVL树完美平衡问题

Posted

技术标签:

【中文标题】AVL树完美平衡问题【英文标题】:AVL tree perfect balancing issue 【发布时间】: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

【问题讨论】:

【参考方案1】:

您可以在wikipedia上阅读

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

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

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

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

      5
  4       6        height 2 
3   #   #   #

在 oder 方面,您将拥有子树

  9
8   #              height 1

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

【讨论】:

同意你的观点:根据 AVL 树的定义,它仍然是平衡的。我真正的问题是,当它深入时,这是否意味着很多空白点? AVL 的“平衡”方面意味着空点的数量是有限的。这是在大量空白点(这会增加遍历时间)和进行大量旋转(这会增加插入时间)之间的一种折衷 感谢 Amxx。我会买的。

以上是关于AVL树完美平衡问题的主要内容,如果未能解决你的问题,请参考以下文章

AVL 树平衡

树结构系列:平衡二叉树AVL树红黑树

平衡树AVL树

树--07---二叉树--04--平衡二叉树(AVL树)

数据结构AVL

数据结构AVL