2015-04-27 3 views
1

Просто быстрый вопрос об деревьях avl. Если бы я это дерево:AVL Tree Rotation's

27 
/\ 
    9 50 
/\ 
2 15 
     \ 
     21 

Почему балансировать на этот ответ ?:

15 
/\ 
    9 27 
//\ 
2 21 50 

Вместо этого (или оба они действительны?):

21 
/\ 
    15 27 
/\ \ 
2 9 50 
+1

Вы случайно заменили 9 и 15 во втором? Потому что, поскольку это не является допустимым деревом поиска. Тем не менее, он все еще сбалансирован. – BenW

ответ

3

Согласно к алгоритму восстановления для дерева AVL балансировка выполняется в два этапа:

I. left rotation сделано для левого поддерева:

|    | 
    9    15 
/\   /\ 
2 15 => 9 21 
    \  /
     21  2 

II. right rotation делается для всего дерева:

 27   15 
    /\  /\ 
    15 50 => 9 27 
/\  //\ 
    9 21  2 21 50 
/
2 

Второй ответ просто неверно, так как она не сохранила порядок элементов.