不能绕枢轴旋转

时间:2012-09-28 11:56:07

标签: algorithm binary-search-tree avl-tree

我正在尝试将新值插入AVL树。新插入导致不平衡(根据Wikipedia上的文章,这应该属于左右情况),因此需要轮换。但是,在目前的情况下不可能轮换,因为两个孩子最终变得比父母小:

           15
         /    \
        10    27
       /  \      
      8   12

现在,如果我要插入11,结构将变得不平衡:

           15
         /    \
        10    27
       /  \      
      8   12
         /
        11

由于左子树较长,而左子树具有较长的右子树,根据维基百科图,这应该属于左右情况。然而,在那里,元素4同时具有左右子树,使得旋转成为可能。但是在这里,因为12只有左子树,所以旋转使它看起来像:

           15
         /    \
        12    27
       /  \      
      10   8
         /
        11

导致12的两个孩子都不到12岁。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

你似乎转错了。具有错误平衡因子的唯一节点是根,因此您可以围绕该节点进行旋转。

这种情况涉及检查10(根的左子)的平衡因子:它是-1,所以我们需要两个不同的旋转(左右的情况)。

首先,我们向左旋转10左右,按照此图像的左上角部分:

enter image description here

所以我们得到:

           15
          /  \
         12  27
        / 
       10    
      /  \
     8   11           

然后按照图像中的描述继续下一次旋转。