我们知道为了保持二叉树平衡,我们可以使用RR LL RL LR foure旋转来使不平衡树平衡,但是如果我们有一个平衡树作为fllows:
885
/ \
/ \
659 912
/ \ \
/ \ 934
212 759
/ \
/ \
11 344
如果我们向这个树添加一个节点(168),并且像这样添加树:
885
/ \
/ \
659 912
/ \ \
/ \ 934
212 759
/ \
/ \
11 344
\
168
树不平衡,但我不能使用四个旋转(RR,LL,RL,LR)中的任何一个来再次使树平衡。有谁告诉我为什么?
答案 0 :(得分:1)
树很重,但树的左子树不会很重,你只需要做一个正确的旋转。 执行右旋后,树将如下所示:
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
}
}