Middle
Comment éviter le débordement de la pile d'appels lors de la traversal d'un arbre ? Comment implémenter une traversal itérative avec une pile en JavaScript ?
sobes.tech IA
Réponse de l'IA
Чтобы избежать переполнения call stack при обходе дерева, вместо рекурсивного подхода используют итеративный обход с явным стеком.
Пример итеративного обхода дерева в JavaScript (обход в глубину):
function iterativeDFS(root) {
const stack = [root];
while (stack.length > 0) {
const node = stack.pop();
console.log(node.value); // обработка узла
// Добавляем детей в стек (например, справа налево, чтобы слева обойти первым)
for (let i = node.children.length - 1; i >= 0; i--) {
stack.push(node.children[i]);
}
}
}
Такой подход позволяет контролировать глубину стека самостоятельно и избежать переполнения, которое может возникнуть при глубокой рекурсии.