Один из алгоритмов для определения высоты двоичного дерева: 2
- Запустить алгоритм, принимая корневой узел в качестве входных данных. 2
- Вычислить высоту левого и правого дочерних узлов корня. 2 Если у корня нет дочерних узлов, вернуть высоту дерева как 0. 2
- Рекурсивно вызвать все узлы из левого и правого поддерева корневого узла, чтобы вычислить высоту двоичного дерева. 2
- После вычисления высоты левого и правого поддерева взять максимальную высоту среди обоих и добавить к ней единицу. 2
Ещё один алгоритм без рекурсии: 3
- Инициализировать очередь и добавить в неё корневой узел. 13
- Проверить, есть ли в дереве узлы. 3 Если нет, вернуть 0. 3
- Добавить в очередь узлы и обрабатывать их в цикле до тех пор, пока очередь не станет пустой. 3
- На каждой итерации цикла исследовать один уровень двоичного дерева. 1 Увеличивать счётчик уровня на 1 и сохранять количество узлов на текущем уровне в переменной nodeCount (равно размеру очереди). 1
- Вставить в очередь детей всех узлов текущего уровня. 1 Для этого запустить ещё один цикл, пока не будет 0 количество узлов на текущем уровне. 1 Проверить, есть ли у текущего узла левый и правый дети. 1 Если да, вставить его в очередь. 1
- Если очередь пуста, значит, последний уровень дерева полностью обработан, и можно вернуть счётчик уровня - 1 как высоту дерева. 1
Также для вычисления высоты двоичного дерева можно использовать формулу h = log2(n+1) - 1, где h — высота двоичного дерева, а n — его количество узлов. 3 Эта формула работает, если дерево полное: все уровни полностью заполнены, кроме последнего, который заполняется слева направо. 3