LL 旋转是单向左旋转还是单向右旋转?

Is the LL Rotation a single left Rotation or a single right Rotation?

例如,

在这个 post 中,它表示 LL Rotationsingle left Rotationhttps://www.freecodecamp.org/news/avl-tree-insertion-rotation-and-balance-factor/

但是,从 tree rotationhttps://en.wikipedia.org/wiki/Tree_rotation 的 wiki 来看,我认为那是 single right Rotation?

更何况,我还看到, https://www.codingeek.com/data-structure/avl-tree-introduction-to-rotations-and-its-implementation/。这表示它是 RR Rotation 并且是 single right Rotation?

我对不同的意见感到困惑。谁能告诉我上图的真相?

首先,所有引用的网站都同意所描述的示例代表一次右旋。

你写:

As this for example, LL tree rotation

In this post, it says the LL Rotation is a single left Rotation https://www.freecodecamp.org/news/avl-tree-insertion-rotation-and-balance-factor/

的确,尽管“左旋”和“右旋”这两个术语的含义没有歧义,但对于“LL 旋”和“RR 旋”的含义似乎存在两种相互矛盾的解释。

However, from the wiki of tree rotation, https://en.wikipedia.org/wiki/Tree_rotation, I think that is a single right Rotation?

好吧,维基百科文章没有使用术语“LL 旋转”。但它也同意所描述的示例代表右旋。到目前为止,术语“左旋转”和“右旋转”没有歧义。

Can anyone tell me the truth for the above picture?

正如所有这些网站所解释的那样:这是一次右旋。

LL, RR

术语“LL 旋转”和“RR 旋转”的使用出现歧义:

首字母缩略词“LL”和“RR”在描述 执行任何旋转之前的不平衡时更有意义。维基百科文章将不平衡树分为 4 类(4 列):

在每一列中,您会在顶部看到原始状态,然后在其下方看到为使树保持平衡而应执行的旋转结果。

所以对于左左情况下的树,我们需要右旋转。对于 Right Right 情况下的树,我们需要向左旋转。

following notes of an ICS course at University of California, Irvine,说明字母LL、RR、LR、RL的来源:

The rotation is chosen considering the two links along the path below the node where the imbalance is, heading back down toward where you inserted a node. (If you were wondering where the names LL, RR, LR, and RL come from, this is the answer to that mystery.)

  • If the two links are both to the left, perform an LL rotation rooted where the imbalance is.
  • If the two links are both to the right, perform an RR rotation rooted where the imbalance is.
  • If the first link is to the left and the second is to the right, perform an LR rotation rooted where the imbalance is.
  • If the first link is to the right and the second is to the left, perform an RL rotation rooted where the imbalance is.

但我觉得说到LL rotation会引起混淆,因为这里我们看到双LL描述了原始state[=62=的不平衡],并且没有描述 action。谈论 LL 状态(或不平衡)然后将解决操作命名为“右旋转”会更清晰。考虑到这一点,我认为维基百科文章的立场很好,因为它避免了“LL 旋转”一词。

这种误解不会出现在 LR 和 RL 旋转中。可以说初始状态是LR(不平衡是给左叶子一个右child造成的),也可以说先左旋,再右旋。在这两种情况下,缩写 LR 都是有意义的。所以这里没有歧义。

结论

左旋和右旋的名词解释清楚了

对于这些旋转中的哪些称为 LL 或 RR 旋转,有不同的传统。在我看来,我们应该避免谈论“LL 旋转”或“RR 旋转”,因为这些字母描述的不是旋转的动作,而是初始状态。最好是说“LL case”或“LL imbalance”。

用这些术语我们可以说:

  • LL 不平衡的树需要右旋转
  • RR不平衡的树需要左旋