【发布时间】:2013-12-18 00:34:27
【问题描述】:
我正在编写一个 AVL 插入函数。请告诉我如何识别插入新节点时平衡受到干扰的节点?我知道如何计算任何节点的平衡因子。但是,如果我将节点添加为叶子,我如何知道平衡被扰乱的祖先节点?这样我就可以对其应用旋转。感谢期待。
【问题讨论】:
我正在编写一个 AVL 插入函数。请告诉我如何识别插入新节点时平衡受到干扰的节点?我知道如何计算任何节点的平衡因子。但是,如果我将节点添加为叶子,我如何知道平衡被扰乱的祖先节点?这样我就可以对其应用旋转。感谢期待。
【问题讨论】:
添加叶子后,您将向根部一个接一个地向上移动到父级,并更新它们的高度(或深度,如果需要)。当您更新树的高度时,您检查它们是否失去平衡并重新平衡它们。然后你继续向上移动。
这是一个O(log(n)) 操作,因为AVL 树中从任何叶子到根的路径都包含O(log(n)) 节点,并且在O(1) 中重新平衡节点
【讨论】:
一旦你得到平衡因子(在我的例子中,(左子树的高度 - 右子树的高度)),
这能回答你的问题吗?
【讨论】: