AVL 树四轮旋转不起作用
The AVL tree four rotate is not works
我们知道要保持二叉树平衡,我们可以使用 RR LL RL LR 四轮旋转使不平衡树达到平衡,但是如果我们有一个平衡树作为流:
885
/ \
/ \
659 912
/ \ \
/ \ 934
212 759
/ \
/ \
11 344
如果我们向这棵树中添加一个节点(168)并且树是这样的:
885
/ \
/ \
659 912
/ \ \
/ \ 934
212 759
/ \
/ \
11 344
\
168
树不平衡,但我不能使用四个旋转(RR,LL,RL,LR)中的任何一个来使树再次平衡。谁能告诉我为什么?
树是左重的,但是树的左子树不是左重的,只需要右旋一次就可以了。
向右旋转后,树将如下所示:
659
/ \
/ \
212 885
/ \ / \
/ \ / \
11 344 759 912
\ \
\ \
168 934
尝试使用以下算法来决定执行哪种方法:
IF tree is right heavy {
IF tree's right subtree is left heavy {
Perform Double Left rotation
}
ELSE{
Perform Single Left rotation
}
}
ELSE IF tree is left heavy {
IF tree's left subtree is right heavy {
Perform Double Right rotation
}
ELSE {
Perform Single Right rotation
}
}
我们知道要保持二叉树平衡,我们可以使用 RR LL RL LR 四轮旋转使不平衡树达到平衡,但是如果我们有一个平衡树作为流:
885
/ \
/ \
659 912
/ \ \
/ \ 934
212 759
/ \
/ \
11 344
如果我们向这棵树中添加一个节点(168)并且树是这样的:
885
/ \
/ \
659 912
/ \ \
/ \ 934
212 759
/ \
/ \
11 344
\
168
树不平衡,但我不能使用四个旋转(RR,LL,RL,LR)中的任何一个来使树再次平衡。谁能告诉我为什么?
树是左重的,但是树的左子树不是左重的,只需要右旋一次就可以了。 向右旋转后,树将如下所示:
659
/ \
/ \
212 885
/ \ / \
/ \ / \
11 344 759 912
\ \
\ \
168 934
尝试使用以下算法来决定执行哪种方法:
IF tree is right heavy {
IF tree's right subtree is left heavy {
Perform Double Left rotation
}
ELSE{
Perform Single Left rotation
}
}
ELSE IF tree is left heavy {
IF tree's left subtree is right heavy {
Perform Double Right rotation
}
ELSE {
Perform Single Right rotation
}
}