【问题标题】:How to identify disturbed node in AVL tree?如何识别 AVL 树中的受干扰节点?
【发布时间】:2013-12-18 00:34:27
【问题描述】:

我正在编写一个 AVL 插入函数。请告诉我如何识别插入新节点时平衡受到干扰的节点?我知道如何计算任何节点的平衡因子。但是,如果我将节点添加为叶子,我如何知道平衡被扰乱的祖先节点?这样我就可以对其应用旋转。感谢期待。

【问题讨论】:

    标签: c++ tree avl-tree


    【解决方案1】:

    添加叶子后,您将向根部一个接一个地向上移动到父级,并更新它们的高度(或深度,如果需要)。当您更新树的高度时,您检查它们是否失去平衡并重新平衡它们。然后你继续向上移动。

    这是一个O(log(n)) 操作,因为AVL 树中从任何叶子到根的路径都包含O(log(n)) 节点,并且在O(1) 中重新平衡节点

    【讨论】:

      【解决方案2】:

      一旦你得到平衡因子(在我的例子中,(左子树的高度 - 右子树的高度)),

      • 如果平衡因子大于 1,则当前节点不平衡,我们要么处于 Left Left 情况,要么处于 Left Right 情况。判断是否为左左大小写,将新插入的键与左子树根中的键进行比较。
      • 如果平衡因子小于-1,则当前节点为 不平衡,我们要么处于右右情况,要么处于右左情况。 要检查它是否是 Right Right 大小写,比较新的 插入的键与右子树根中的键。

      这能回答你的问题吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多