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

0

Скажем, у меня есть дерево AVL, так что его узлы сохраняют свой собственный коэффициент баланса как одно целое.

Как я могу рассчитать коэффициент баланса узла N, если я знаю коэффициент баланса как его левого, так и правого ребенка.

Обратите внимание, что у меня нет rHight и lHight, поэтому bal (N) = lHeight - rHeight не является вариантом.

  • 0
    Возможно, вы неправильно поняли концепцию баланса. Вы можете сбалансировать дерево двумя способами: сбалансированным по высоте и сбалансированным по весу. Я только что построил сбалансированное по высоте дерево, у которого leftHeight = 4 и rightHeight = 3. Однако leftCount = 15, а rightCount = 4. Я предполагаю, что фактор баланса, на который вы ссылаетесь, имеет отношение к весу больше, чем росту, то есть количество элементов слева и справа различается не более чем на 1, что не всегда имеет место с деревом с балансом высоты. Дерево AVL сбалансировано по высоте.
  • 0
    Вы также можете сбалансировать дерево в обоих направлениях, но я думаю, что оно намного медленнее.
Теги:
data-structures
binary-tree
avl-tree
tree-balancing

1 ответ

1
Лучший ответ

Короткий ответ - вы не можете.

Длительный ответ:

Рассмотрим эти два дерева:

           A
        /     \
     B           C                   A
   /   \       /   \                / \
  D     E     F     G              B   C
 / \   / \   / \   / \
H   I J   K L   M N   O

У них одинаковый коэффициент баланса, но они не одинаковой высоты.

Итак, если у вас есть только коэффициент баланса для ребенка, вы не знаете, как высоко это поддерево, поэтому вы не можете использовать только это, чтобы вычислить коэффициент баланса родителя.

  • 0
    Я вижу сейчас. Большое спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню