我正在编写AVL插入函数。请告诉我如何在插入新节点时识别其天平受到干扰的节点?我知道如何计算任何节点的平衡因子。但是,如果我将节点添加为叶子,我怎么能知道其平衡被扰乱的祖先节点?这样我就可以对它进行旋转。感谢您的期待。
答案 0 :(得分:4)
添加一个叶子后,向父母一个接一个地朝向根移动并更新它们的高度(或深度,如果你想要的话)。当您更新树高时,检查它们是否失去平衡并重新平衡它们。然后你继续向上移动。
这是O(log(n))
操作,因为AVL树中从任何叶子到根的路径包含O(log(n))
个节点,并且在O(1)
答案 1 :(得分:2)
一旦得到平衡因子(在我的情况下,(左子树的高度 - 右子树的高度)),
这会回答你的问题吗?