Назад к вопросам
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 или любыми иерархическими структурами.