Дополнительные случаи в деревьях AVL

Деревья AVL, кажется, имеют четыре вида преобразований: левый-левый, левый-правый, правый-левый и правый-правый. Однако, похоже, могут быть и другие обстоятельства. Я представляю это как левостороннее:

Ни левые, ни правые повороты не могут сбалансировать это дерево. Какой алгоритм можно использовать, чтобы сбалансировать его?

2 ответа

Решение

Здесь можно применять как LL, так и LR

        50
       /  \
     40    55
    /  \
  35    45
  / \   / \
34  36 44 46

После первого поворота LR:

           50
          /  \
        45   55
       /  \
     40    46
    /  \
  35    44
  / \
34  36

После второго поворота LR:

        45
       /  \
     40    50
    / \    / \
  35  44  46  55
 / \
34  36

Это действительное дерево AVL. Обратите внимание, что

В дереве AVL высоты двух дочерних поддеревьев любого узла отличаются не более чем на один

Вы также можете сделать LL очередь:

     40
    /  \
  35    50
  / \   / \
34  36 45  55
       /\
     44  46

Опять же, это действительное дерево AVL.

Я думаю, что вы не можете получить левый баланс. Потому что, если вы построили левый баланс, вы можете сначала получить левый-левый или левый-правый, тогда дерево будет вращаться и сохранять равновесие.

Другие вопросы по тегам