Middle
¿Con qué frecuencia has tenido que trabajar con árboles? ¿Qué algoritmos de recorrido conoces? ¿Qué limitaciones tiene la recursión en JavaScript?
sobes.tech AI
Respuesta de la IA
Деревья часто встречаются в задачах, связанных с 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 или любыми иерархическими структурами.