Вычисление высоты дерева: методы и примеры кода

Определение высоты дерева — распространенная проблема в информатике и программировании. Высота дерева относится к максимальному количеству ребер между корневым узлом и листовым узлом. В этой статье блога мы рассмотрим несколько методов расчета высоты дерева, а также приведем примеры кода на Python.

Метод 1: рекурсивный подход
Один из самых простых методов определения высоты дерева — использование рекурсивного подхода. Мы можем определить рекурсивную функцию, которая обходит дерево и вычисляет высоту, рекурсивно находя высоту левого и правого поддеревьев.

# Node class definition
class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
# Recursive function to calculate the height of the tree
def calculate_tree_height(node):
    if node is None:
        return 0
    left_height = calculate_tree_height(node.left)
    right_height = calculate_tree_height(node.right)
    return max(left_height, right_height) + 1
# Example usage
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print("The height of the tree is:", calculate_tree_height(root))

Метод 2: итеративный подход с использованием очереди
Другой подход к определению высоты дерева — использование итеративного подхода со структурой данных очереди. Мы можем выполнить обход дерева по уровням, отслеживая количество уровней, пока не достигнем последнего уровня.

from collections import deque
# Node class definition (same as above)
# Iterative function to calculate the height of the tree
def calculate_tree_height(node):
    if node is None:
        return 0
    queue = deque()
    queue.append(node)
    height = 0
    while queue:
        level_size = len(queue)
        for _ in range(level_size):
            current_node = queue.popleft()
            if current_node.left:
                queue.append(current_node.left)
            if current_node.right:
                queue.append(current_node.right)
        height += 1
    return height
# Example usage (same as above)
print("The height of the tree is:", calculate_tree_height(root))

Метод 3: использование поиска в глубину (DFS)
Поиск в глубину — это еще один метод расчета высоты дерева. Мы можем выполнить обход дерева в глубину и отслеживать максимальную глубину, достигнутую во время обхода.

# Node class definition (same as above)
# Depth-First Search function to calculate the height of the tree
def calculate_tree_height(node):
    if node is None:
        return 0
    stack = [(node, 1)]
    height = 0
    while stack:
        current_node, current_depth = stack.pop()
        if current_depth > height:
            height = current_depth
        if current_node.left:
            stack.append((current_node.left, current_depth + 1))
        if current_node.right:
            stack.append((current_node.right, current_depth + 1))
    return height
# Example usage (same as above)
print("The height of the tree is:", calculate_tree_height(root))