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]);
}
}
}
Αυτή η προσέγγιση επιτρέπει τον χειροκίνητο έλεγχο του βάθους της στοίβας και την αποφυγή υπερχείλισης που μπορεί να προκύψει με βαθιά αναδρομή.