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

How to identify disturbed node in AVL tree?

本文关键字:干扰 节点 AVL 何识别 识别      更新时间:2023-10-16

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

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

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

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

  • 如果平衡因子大于 1,则当前节点不平衡,我们要么处于左左大小写,要么处于左右大小写。要检查它是否左写,请将新插入的键与左子树根目录中的键进行比较。
  • 如果余额因子小于 -1,则当前节点为不平衡,我们要么处于右右大小写,要么处于右左大小写。要检查它是否是正确的大小写,请比较新的插入的键,键在右子树根中。

这回答了你的问题吗?