AVL Rotation - 要旋转的节点
AVL Rotation - Which node to rotate
我已经阅读了很多关于 AVL 树的资料,但没有找到任何人解决这个问题:当 AVL 树变得不平衡时,应该先旋转哪个节点?
假设我有树:
10
/ \
5 25
/
20
我想加上 15,根节点和它的子节点 25 都会不平衡。
10
/ \
5 25
/
20
/
15
我可以进行 25 次 RR 旋转(或单次旋转),得到以下树:
10
/ \
5 20
/\
15 25
或关于根的 RL 旋转(双旋转),创建以下树:
20
/ \
10 25
/ \
5 15
我对这里和类似情况下哪种旋转最合适感到困惑。
这里的RR旋转是正确的。一旦规则被打破,就应该尽快(尽可能低)进行轮换。这里是 25 人。
较高的旋转首先不一定违反规则,其次会变得太复杂,尽管乍一看似乎并非如此。
我已经阅读了很多关于 AVL 树的资料,但没有找到任何人解决这个问题:当 AVL 树变得不平衡时,应该先旋转哪个节点?
假设我有树:
10
/ \
5 25
/
20
我想加上 15,根节点和它的子节点 25 都会不平衡。
10
/ \
5 25
/
20
/
15
我可以进行 25 次 RR 旋转(或单次旋转),得到以下树:
10
/ \
5 20
/\
15 25
或关于根的 RL 旋转(双旋转),创建以下树:
20
/ \
10 25
/ \
5 15
我对这里和类似情况下哪种旋转最合适感到困惑。
这里的RR旋转是正确的。一旦规则被打破,就应该尽快(尽可能低)进行轮换。这里是 25 人。
较高的旋转首先不一定违反规则,其次会变得太复杂,尽管乍一看似乎并非如此。