Вычисление суммы путей в Python: рекурсивный, итеративный подход и подход DFS

Метод 1: рекурсивный подход

def path_sum(root, target_sum):
    if not root:
        return 0
    count = 0
    if root.val == target_sum:
        count += 1
    count += path_sum(root.left, target_sum - root.val)
    count += path_sum(root.right, target_sum - root.val)
    return count

Метод 2: итеративный подход с использованием стека

def path_sum(root, target_sum):
    if not root:
        return 0
    stack = [(root, root.val)]
    count = 0
    while stack:
        node, curr_sum = stack.pop()
        if curr_sum == target_sum:
            count += 1
        if node.right:
            stack.append((node.right, curr_sum + node.right.val))
        if node.left:
            stack.append((node.left, curr_sum + node.left.val))
    return count

Метод 3. Поиск в глубину (DFS)

def path_sum(root, target_sum):
    def dfs(node, target):
        if not node:
            return 0
        count = 0
        if node.val == target:
            count += 1
        count += dfs(node.left, target - node.val)
        count += dfs(node.right, target - node.val)
        return count

    if not root:
        return 0
    return dfs(root, target_sum)

Обратите внимание, что код предполагает существование двоичной древовидной структуры с узлами, имеющими атрибут значения (например, root.val) и указатели на левый и правый дочерние элементы (например, root. влево, root.right).