Sobes.tech
Middle

Kā izvairīties no zvanu steka pārsprieguma, apceļojot koku? Kā JavaScript realizēt iteratīvu apceļošanu ar steku?

sobes.tech AI

Atbilde no 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]);
    }
  }
}

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