问题描述
在这篇文章中,它说LL Rotation
是single left Rotation
。
https://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 Rotation
和single 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列):
在每一列中,您会在顶部看到原始状态,然后在其下方看到为使树保持平衡而应该执行的旋转结果。
因此,对于左向左情况下的树,我们需要向右旋转。对于在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不平衡的树需要向左旋转