Sobes.tech
Назад к вопросам
Middle
1

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

Компании, где спрашивали
UserGate

Ответ от нейросети

sobes.tech AI

Деревья часто встречаются в задачах, связанных с DOM-структурой, файловыми системами, иерархиями данных и т.п. Основные алгоритмы обхода деревьев — это:

  • Обход в глубину (DFS): включает три варианта — preorder (узел, потом дети), inorder (левый ребенок, узел, правый ребенок, применимо к бинарным деревьям), postorder (дети, потом узел).
  • Обход в ширину (BFS): обход по уровням, начиная с корня.

В JavaScript рекурсия ограничена глубиной стека вызовов, которая зависит от движка и обычно составляет несколько тысяч вызовов. При слишком глубокой рекурсии возникает ошибка "Maximum call stack size exceeded". Чтобы избежать этого, можно использовать итеративные алгоритмы с явным стеком или оптимизировать рекурсию (например, хвостовую рекурсию, если движок её поддерживает).

Пример обхода дерева в глубину (preorder) на JavaScript:

function dfs(node) {
  if (!node) return;
  console.log(node.value); // обработка узла
  node.children.forEach(child => dfs(child));
}

Такой подход удобен для работы с DOM или любыми иерархическими структурами.