Sobes.tech
Back to questions
Middle
2

Как избежать переполнения call stack при обходе дерева? Как реализовать итеративный обход через стек в JavaScript?

Companies where asked
UserGate

Answer from AI

sobes.tech AI

Чтобы избежать переполнения 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]);
    }
  }
}

Такой подход позволяет контролировать глубину стека самостоятельно и избежать переполнения, которое может возникнуть при глубокой рекурсии.