如何识别AVL树中的受干扰节点?

时间:2013-12-17 16:26:02

标签: c++ tree avl-tree

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

2 个答案:

答案 0 :(得分:4)

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

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

中完成节点的重新平衡

答案 1 :(得分:2)

一旦得到平衡因子(在我的情况下,(左子树的高度 - 右子树的高度)),

  • 如果平衡因子大于1,则当前节点不平衡,我们处于左左情况或左右情况。要检查它是否左侧大小写,请将新插入的密钥与左子树根中的密钥进行比较。
  • 如果平衡因子小于-1,则当前节点为 不平衡,我们要么是右翼案件,要么是右翼案件。 要检查它是否是右对比,请比较新的 使用右子树根中的键插入密钥。

这会回答你的问题吗?