【问题标题】:AVL trees confusion about heightAVL 树对高度的困惑
【发布时间】:2020-12-12 20:43:45
【问题描述】:

AVL tree examples

我对 AVL 树感到很困惑。我的教科书说“AVL 树是具有高度平衡属性的 BST,并且在插入或删除节点时重新平衡树的特定操作。本节讨论平衡属性;另一节讨论操作。BST 是高度平衡的,如果任何节点,该节点的左右子树的高度仅相差 0 或 1。”他们的意思是左右还是什么?是不是因为第二个,从 A 到 F 的高度是 2?从A到C,然后C到E,然后E到F。我很困惑,最初我以为它们是指上下高度。这将使左侧的高度为 3,而右侧的高度为 2

【问题讨论】:

  • 您似乎缺少图片,所以我们不知道 A-F 到底是什么。不过可以参考这个博客skerritt.blog/avl
  • 谢谢,让我看看
  • 我认为该措辞具有误导性。如果对于 所有节点,节点的左右子树的高度仅相差 0 或 1,则 BST 是高度平衡的。对于第二个示例,节点“C”违反了此要求(其左子树高度为 2,其右子树高度为 0)。这种对平衡要求的单一违反意味着整棵树不是 AVL 树。

标签: java avl-tree


【解决方案1】:

我们可以简单地说,如果特定节点的左侧最大边(直到我们到达叶节点需要很长时间)l 和右侧最大边 r,并且它们是否满足以下等式

| l - r  | <= 1

那么那个节点是平衡的。如果 BST 中的所有节点都是平衡的,则该 BST 是平衡的。

在您的 AVL 树示例中,

您可以检查的每个字母如下

  1. D --> |2 - 1| = 1 个平衡节点
  2. C --> |1 - 0| = 1 个平衡节点
  3. A --> |0 - 0| = 0 个平衡节点
  4. E --> |0 - 0| = 0 个平衡节点

在您的非 AVL 树示例中

  1. D --> |3 - 2| = 1 个平衡节点
  2. C --> |2 - 0| = 2个不平衡节点
  3. E --> |0 - 1| = 1 个平衡节点
  4. A --> |0 - 1| = 1 个平衡节点
  5. B --> |0 - 0| = 0 个平衡节点
  6. F --> |0 - 0| = 0 个平衡节点

当我们至少有一个不平衡节点时,这意味着 BST 不平衡。

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多