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