Допустим, у вас есть BST
4 // No of nodes 1
/ \
2 6 // No of nodes 2
/ \ / \
1 3 5 7 // No of nodes 4
Ваша функция isBalanced
проходит через все узлы, включая те, у которых нет дочерних элементов, и вызывает getHeight
, чтобы вычислить высоту левого и правого дочерних элементов.
Рекурсивное отношение функции будет
, которое получено из основной теоремы
a
= количество подзадач в рекурсии
n/b
= размер каждой подзадачи
f(n)
= стоимостьработы, которая должна быть выполнена вне рекурсивных вызовов
a
- это 2
, потому что мы должны посетить оба дочерних узла каждого родителя
b
- это 2
, потому что есливы замечаете, что число узлов уменьшается вдвое каждый раз, когда вы переходите на уровень выше (снизу).
f(n)
равно n
, потому что нам нужно вызвать getHeight()
на каждом узле
Что удовлетворяет второму случаю основной теоремы:
Установка значений для доказательства f(n) = O(n^logb(a))
Таким образом, мы получаем сложность времени O(n log n)