多个AVL树旋转

时间:2011-06-12 18:15:02

标签: data-structures rotation avl-tree

假设我有一个无序的集合{3,6,5,1,2,4},我需要构建一个AVL树,
这很好......我理解基本轮换,我在这里谈到这一点:

                               5 
                             /   \
                            2      6
                           / \
                         1     3

但是当我尝试插入4时它全部崩溃了 我得到了我的最终答案(左边的)

             4      But the actual answer is:      3
           /   \                                 /   \
          2     5                               2     5
         / \     \                             /     / \
        1   3     6                           1     4   6

当我把它分解时,我会被卡住做同样的旋转 所以即时通知我如何使用对此AVL有效的父项进行轮换?

并且我的解决方案有效吗?

1 个答案:

答案 0 :(得分:1)

嗯,据我所知,当你第一次添加4时,你得到以下树。

    5
   / \
  2   6
 / \
1   3
     \
      4

要跟进,请参阅Wikipedia's article on AVL trees。因为节点5的平衡因子(请注意,这是在文章中定义的)是+2而节点2的平衡因子是-1,所以首先需要将节点2子树旋转到左边。 / p>

      5
     / \
    3   6
   / \
  2   4
 /
1

接下来,您需要向右旋转整个树(关于节点5)。

    3
   / \
  2   5
 /   / \
1   4   6

这有意义吗?