Sobes.tech
Middle

Как да избегнем преливане на стек при обход на дърво? Как да реализираме итеративен обход чрез стек в JavaScript?

sobes.tech AI

Отговор от AI

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

Пример за итеративен обход в 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]);
    }
  }
}

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