Сбор всех значений узлов дерева

Пример требует обхода в ширину: сначала корень, потом его дети, затем следующий уровень. Используйте очередь и индекс чтения, чтобы не делать дорогой shift на каждом шаге.

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

Что ответить на собеседовании

Пример требует обхода в ширину: сначала корень, потом его дети, затем следующий уровень. Используйте очередь и индекс чтения, чтобы не делать дорогой shift на каждом шаге.

Подробный разбор

Ответ с пояснениями

Условие

Требуется реализовать функцию collectValues, которая возвращает массив со значениями всех вершин переданного дерева.

const root = {
  value: 1,
  children: [
    {
      value: 2,
      children: [
        { value: 4 },
        { value: 5 },
      ],
    },
    {
      value: 3,
      children: [
        { value: 6 },
        { value: 7 },
      ],
    },
  ],
};

collectValues(root); // => [1, 2, 3, 4, 5, 6, 7]

Ответ

Пример требует обхода в ширину: сначала корень, потом его дети, затем следующий уровень. Используйте очередь и индекс чтения, чтобы не делать дорогой shift на каждом шаге.

function collectValues(root) {
  if (!root) return [];
  const queue = [root], values = [];
  for (let head = 0; head < queue.length; head++) {
    const node = queue[head];
    values.push(node.value);
    for (const child of node.children ?? []) queue.push(child);
  }
  return values;
}

Для данного дерева получится [1,2,3,4,5,6,7]; обычный DFS дал бы иной порядок. Предполагается именно дерево без циклов. Время O(n), память O(n) для очереди и результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее