Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: tree traversal, recursion, post-order, subtree sum, DFS

Как вычислить сумму значений в поддеревьях?

Вопрос проверяет понимание рекурсивного обхода дерева и вычисления агрегированных значений для каждого узла на основе его поддеревьев.

Короткий ответ

Для вычисления суммы значений в поддеревьях используется рекурсивный обход в глубину (post-order). Сначала рекурсивно вычисляются суммы для левого и правого поддеревьев, затем к ним прибавляется значение текущего узла. Результат возвращается наверх, что позволяет получить сумму для каждого узла.

Длинный ответ

Концепция вычисления суммы в поддеревьях

Задача состоит в том, чтобы для каждого узла бинарного дерева найти сумму всех значений в его поддереве, включая сам узел. Это классический пример применения рекурсивного обхода в глубину (DFS) с постфиксным порядком (post-order), когда сначала обрабатываются дети, а затем родитель.

Как это работает

Алгоритм рекурсивно спускается к листьям, вычисляет сумму для каждого узла, складывая значения левого и правого поддеревьев с собственным значением. Результат сохраняется или возвращается. Такой подход гарантирует, что каждый узел посчитан ровно один раз, а сложность составляет O(n), где n — количество узлов.

Пример кода на JavaScript

class TreeNode {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

function computeSubtreeSums(root) {
  if (!root) return 0;
  const leftSum = computeSubtreeSums(root.left);
  const rightSum = computeSubtreeSums(root.right);
  root.subtreeSum = leftSum + rightSum + root.val;
  return root.subtreeSum;
}

// Пример использования:
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
computeSubtreeSums(root);
console.log(root.subtreeSum); // 6
console.log(root.left.subtreeSum); // 2
console.log(root.right.subtreeSum); // 3

Применение

Этот метод используется в задачах балансировки деревьев, анализа данных (например, вычисление среднего по поддеревьям), а также в алгоритмах, где требуется агрегация информации по иерархии (файловые системы, DOM-дерево).

Вывод: Рекурсивное вычисление суммы поддеревьев — фундаментальный приём для работы с деревьями, который легко адаптируется под любые агрегирующие функции (максимум, минимум, количество узлов). Применяйте его везде, где нужно получить сводную информацию по иерархической структуре.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Math

    Math

Ключевые слова

#tree traversal

#recursion

#post-order

#subtree sum

#DFS

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.