LL 旋转是单向左旋转还是单向右旋转?
Is the LL Rotation a single left Rotation or a single right Rotation?
例如,
在这个 post 中,它表示 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 的 wiki 来看,我认为那是 single right Rotation
?
更何况,我还看到,
https://www.codingeek.com/data-structure/avl-tree-introduction-to-rotations-and-its-implementation/。这表示它是 RR Rotation
并且是 single right Rotation
?
我对不同的意见感到困惑。谁能告诉我上图的真相?
- 是否是 LL 旋转?
- 是单向左旋转还是单向右旋转?
首先,所有引用的网站都同意所描述的示例代表一次右旋。
你写:
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不平衡的树需要左旋
例如,
在这个 post 中,它表示 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 的 wiki 来看,我认为那是 single right Rotation
?
更何况,我还看到,
https://www.codingeek.com/data-structure/avl-tree-introduction-to-rotations-and-its-implementation/。这表示它是 RR Rotation
并且是 single right Rotation
?
我对不同的意见感到困惑。谁能告诉我上图的真相?
- 是否是 LL 旋转?
- 是单向左旋转还是单向右旋转?
首先,所有引用的网站都同意所描述的示例代表一次右旋。
你写:
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不平衡的树需要左旋