平衡AVL树需要多次旋转?

时间:2014-01-03 20:50:17

标签: data-structures tree rotation binary-tree avl-tree

我最好的猜测是,当您从已经平衡的AVL树插入或删除一个元素时,一次旋转总是足以平衡AVL树。

一次旋转总是足够吗? 一个例子将有助于需要多次轮换。

PS:我将RL / LR旋转计为仅一次旋转。

2 个答案:

答案 0 :(得分:6)

对于插入1旋转最多。
对于删除,旋转次数以O(log(n))为界。 Log(n)是树的高度。
关于AVL删除的更多解释。 从AVL删除节点时,可能会导致树不平衡,您必须追溯到不平衡点。如果不平衡点是根。您必须从上到下重新平衡树。

答案 1 :(得分:4)

对于插入,我相信一个就足够了。

但是要删除: 考虑这棵树:

                 50
              /      \
            25       75
           /   \    /   \
          15   40  60    80
               /  /  \    \
              35 55  65   90
                     /
                    62

删除15,首先破坏25的平衡因子,一次旋转:

                 50
              /      \
            35       75
           /   \    /   \
          25  40  60    80
                  /  \    \
                 55  65   90
                     /
                    62

但是,我们必须检查,现在树的根平衡因子被破坏,必须再次旋转:

                 60
              /      \
            50       75
           /   \     /  \
          35   55   65   80
         /  \       /     \
        25  40     62     90