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

Αυτή η προσέγγιση επιτρέπει τον χειροκίνητο έλεγχο του βάθους της στοίβας και την αποφυγή υπερχείλισης που μπορεί να προκύψει με βαθιά αναδρομή.