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

问题描述

例如,

LL tree rotation

在这文章中,它说LL Rotationsingle left Rotationhttps://www.freecodecamp.org/news/avl-tree-insertion-rotation-and-balance-factor/

但是,从tree rotation的维基https://en.wikipedia.org/wiki/Tree_rotation看,我认为这是single right Rotation吗?

此外,我还看到, https://www.codingeek.com/data-structure/avl-tree-introduction-to-rotations-and-its-implementation/。这说它是RR Rotationsingle right Rotation吗?

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

  • 它是LL旋转吗?
  • 是左转还是右转?

解决方法

首先,所有引用的网站都同意所描绘的示例代表单个右旋转。

您写:

例如,LL树旋转

在这篇文章中,它说LL旋转是左旋转https://www.freecodecamp.org/news/avl-tree-insertion-rotation-and-balance-factor/

的确,尽管对于“左旋”和“右旋”的含义并没有歧义,但“ LL旋”和“ RR旋”的含义似乎有两种矛盾的解释。

但是,从树木旋转的维基https://en.wikipedia.org/wiki/Tree_rotation中,我认为这是一个正确的旋转?

好吧,维基百科文章没有使用术语“ LL轮换”。但是,它也确实同意所描绘的示例代表右旋。到目前为止,“左旋转”和“右旋转”这两个词还没有歧义。

有人能告诉我上面图片的真相吗?

就像所有这些网站所解释的那样:这是一个向右轮换。

LL,RR

使用术语“ LL旋转”和“ RR旋转”产生歧义:

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

enter image description here

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

因此,对于左向左情况下的树,我们需要向右旋转。对于在Right Right情况下的树,我们需要向左旋转。

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

在考虑不平衡所在节点下方路径上的两个链接的情况下选择旋转,然后向下回头插入节点。 (如果您想知道名称LL,RR,LR和RL的来源,这就是这个谜的答案。)

  • 如果两个链接都在左侧,则执行从不平衡位置开始的LL旋转。
  • 如果两个链接都在右侧,则执行从不平衡位置开始的RR旋转。
  • 如果第一个链接位于左侧,第二个链接位于右侧,则执行从不平衡位置开始的LR旋转。
  • 如果第一个链接位于右侧,第二个链接位于左侧,则执行从不平衡位置开始的RL旋转。

但是我觉得谈到LL 旋转可能会引起混乱,因为在这里我们看到双LL描述了原始状态的不平衡,而没有描述 action 。说到LL状态(或不平衡),然后将解决动作命名为“右旋”会更干净。考虑到这一点,我认为Wikipedia文章的立场很好,因为它避免了“ LL旋转”一词。

LR和RL旋转不会引起这种误解。您可以说初始状态是LR(不平衡是由于给左叶子一个右孩子而引起的),还可以说首先需要左旋转,然后是右旋转。在两种情况下,缩写LR都是有意义的。因此那里没有歧义。

结论

“向左旋转”和“向右旋转”这两个词很清楚。

将这些旋转中的哪一个称为LL或RR旋转有不同的传统。我认为我们应该避免谈论“ LL旋转”或“ RR旋转”,因为这些字母不是描述旋转的动作,而是初始状态。最好说“ LL案例”或“ LL不平衡”。

有了这些术语,我们可以说:

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

enter image description here