【问题标题】:Extra Cases in AVL TreesAVL 树中的额外案例
【发布时间】:2015-12-22 18:05:05
【问题描述】:

AVL 树似乎有四种转换:Left-Left、Left-Right、Right-Left 和 Right-Right。但是,似乎也可能存在其他情况。我将此提交为左平衡:

左旋和右旋都不能平衡这棵树。使用什么算法来平衡它?

【问题讨论】:

  • AV&L 没有没有给出一个过程来平衡任何有序的二叉树到一个具有“最多一次双重旋转”的AVL树。他们介绍了如何在插入单个节点后使用三个状态之一/每个节点两个额外位来重新平衡二叉树。这被扩展到其他操作。上面显示的三个“左”树都不是将单个节点添加到有效 AVL 树的结果,每个都可能是由于删除了一个值得标签大于 50 的节点。也就是说,什么(就高度而言)在“最后两棵左树”之间标记为 40 和 45 的节点是否不同?

标签: algorithm data-structures avl-tree tree-rotation


【解决方案1】:

LL和LR都可以在这里应用

        50
       /  \
     40    55
    /  \
  35    45
  / \   / \
34  36 44 46

第一个 LR 转弯后:

           50
          /  \
        45   55
       /  \
     40    46
    /  \
  35    44
  / \
34  36

第二次左转后:

        45
       /  \
     40    50
    / \    / \
  35  44  46  55
 / \
34  36

这是有效的 AVL 树。请注意

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

你也可以做 LL 转弯:

     40
    /  \
  35    50
  / \   / \
34  36 45  55
       /\
     44  46

这又是有效的 AVL 树。

【讨论】:

    【解决方案2】:

    我认为您无法获得左平衡案例。 因为如果你建造了左平衡树,你可能会先得到左左或左右,然后树会旋转并保持平衡。

    【讨论】:

    • 您会得到每个描述的案例,从有效 AVL 树的右子树中删除单个节点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多