Είμαι στη διαδικασία της μετατροπής αναδρομική συνάρτηση για BST να μη αναδρομικών για να βοηθήσουν στην προετοιμασία για μια συνέντευξη. Μέχρι τώρα κατάλαβα παραγγελίας, inorder, postorder, αναζήτηση, διαγραφή, εισαγωγή και μετατροπή του BST σε μια κυκλική συνδεδεμένη λίστα. Έχω πρόβλημα αναφέρονται για το πώς να χρησιμοποιήσετε στοίβα ή ουρές για να πάρουν το ύψος και να βρει αν είναι BST. Κάθε συμβουλές θα ήταν ευγνώμονες. Δεν ψάχνω για τον κωδικό, αλλά η λογική πίσω από τον κώδικα.
Ψευδοκώδικα για την μη αναδρομική εφαρμογή του ύψους των δέντρων και isBST
Για αρχή, καλή δουλειά προετοιμασία για συνεντεύξεις, όπως αυτό! Ελπίζω ότι έχετε τη διασκέδαση παίζοντας γύρω με αυτούς τους αλγορίθμους.
Ας ξεκινήσουμε με το έργο της προσπαθεί να καθορίσει εάν το δυαδικό δέντρο είναι ένα BST. Ένας τρόπος για να γίνει αυτό είναι να κάνετε μια βόλτα inorder του δέντρου και ελέγξτε αν τα στοιχεία είναι σε ταξινομημένη σειρά. Αυτό θα ισχύει αν και μόνο αν το δέντρο είναι ένα BST. Δεδομένου ότι έχετε ήδη κωδικό για να κάνετε μια βόλτα inorder των στοιχείων του δέντρου, θα πρέπει να είναι σε θέση να προσαρμοστεί εύκολα τον κωδικό σας για να ελέγξετε αν τα στοιχεία που βγαίνουν από τα πόδια inorder κατατάσσονται σύμφωνα με την παρακολούθηση του τελευταίου στοιχείου που είδατε στο η απόσταση inorder, στη συνέχεια, συγκρίνοντας κάθε στοιχείο που παράγεται στο προηγούμενο στοιχείο. Εάν οι δύο είναι εκτός λειτουργίας, το δέντρο δεν είναι BST.
Για τον προσδιορισμό του ύψους του δέντρου, μία επιλογή θα ήταν να λάβουν μία από τις αναζητήσεις που έχετε καταλήξει μέχρι στιγμής (προ-παραγγελία, postorder, inorder) και να παρακολουθείτε το ύψος της στοίβας σε κάθε σημείο. Η ιδέα εδώ είναι ότι από τη στοίβα σας θα έχετε πάντα το δρόμο του πίσω από κάθε κόμβο μέχρι τη ρίζα, μπορείτε απλά να περπατήσετε το δέντρο και να καταγράψει το βαθύτερο που είδατε ποτέ η στοίβα γίνει. Αυτό το μέγιστο βάθος είναι τότε το ύψος του δέντρου.
Η ελπίδα αυτό βοηθά! Και καλή τύχη με συνεντεύξεις!
Για να βρείτε το ύψος του δέντρου, μπορείτε να χρησιμοποιήσετε το [χρόνο O (n)] Morris διάσχισης].
Για να ελέγξετε αν είναι ένα έγκυρο BST, κάντε μια βόλτα inorder του δέντρου. Μετακίνηση των στοιχείων σε μία συστοιχία. Ελέγξτε αν η συστοιχία έχει ταξινομηθεί ή να μην επικυρώσει μια BST.













