Middle
32
Чӣ қадар вақтро бо дарахтҳо кор кардан лозим буд? Кадом алгоритмҳои гузаришро медонед? Маҳдудиятҳои рекурсия дар JavaScript чист?
Ширкатҳо дар куҷо пурсиданд
UserGate
Ҷавоб аз AI
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 или любыми иерархическими структурами.