AVL树四轮旋转不起作用

时间:2016-11-20 08:53:41

标签: tree avl-tree

我们知道为了保持二叉树平衡,我们可以使用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)中的任何一个来再次使树平衡。有谁告诉我为什么?

1 个答案:

答案 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
 } 
}