Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Java

Πώς να κάνετε Postorder Traversal σε ένα δυαδικό δέντρο σε Java

Java Αν και δεν παρέχει ένα δυαδικό δέντρο τάξη στις προεπιλεγμένες βιβλιοθήκες , ένα βασικό δυαδικό κατηγορία δέντρο είναι αρκετά απλό να παρουσιαστεί . Ένα « διάσχιση " μίας δομής δεδομένων είναι ένας αλγόριθμος που επισκέπτεται μία φορά κάθε κόμβο . Αυτό εφαρμόζεται συχνά ως ένα είδος iterator ( σαν μια λίστα iterator ) ή τη μέθοδο που θα καλέσει μια μέθοδο επανάκλησης για κάθε κόμβο . Στην Java , να κάνει μια " postorder " διάσχιση που θα επισκεφθεί τον κόμβο ρίζας τελευταία , δεν επανακλήσεις ή επαναλήπτες είναι απαραίτητο. Η λειτουργία διάσχισης θα εκτυπώσετε απλά κάθε κόμβο που επισκέπτεται την κονσόλα . Οδηγίες
Η 1

Γράψτε μια βασική δυαδική κατηγορία δένδρο αναζήτησης . Υπάρχουν μόνο δύο μεθόδους που πρέπει να υποστηριχθούν σε αυτό το στάδιο : ένα βασικό κατασκευαστή που προετοιμάζει την αξία του κόμβου , και μια μέθοδος ένθετο . Η μέθοδος ένθετο θα διασχίσει ένα δέντρο και να δημιουργήσετε ένα νέο κόμβο στη σωστή θέση . " " δημόσια τάξη BinaryTree { BinaryTree αριστερά? BinaryTree δεξιά? αξία int ? δημόσια BinaryTree ( int v) {value = v ? } //Τοποθετήστε μια τιμή στο δέντρο δημόσιο void insert ( int v) { αν ( κατά περίπτωση ( αριστερά = = null ) αριστερά = νέα BinaryTree ( v) ? άλλο left.insert ( v ) ? } else if ( v > value ) {if (δεξιά == null) δεξιά = νέα BinaryTree ( v) ? άλλο right.insert ( v ) ? . . } } " " 2

Δημιουργήστε ένα παράδειγμα του δυαδικού δέντρου που θα είναι ο ριζικός κόμβος κάθε κόμβο , ακόμα και ο κόμβος ρίζα , πρέπει να έχει τιμή
Η
3

Επιλέξτε μια τιμή για τον κόμβο που είναι κάπου στη μέση από τα αντικείμενα που θα πρέπει να την αποθήκευση . για παράδειγμα , αν είστε αποθήκευση ομοιόμορφη κατανομή των αριθμών 1-100 , 50 είναι μια καλή επιλογή για . . το κόμβο Δυαδικά δένδρα πρέπει να είναι όσο το δυνατόν πιο ισορροπημένη , αφού ανισόρροπη δέντρα μεγαλώνουν πολύ ψηλά και δεν είναι πολύ αποτελεσματικά " " BinaryTree β = νέα BinaryTree ( 50 ) ? " "
Η 4

Εισαγωγή κάποιοι κόμβοι στο δέντρο . Δεδομένου ότι αυτό το δέντρο δεν είναι αυτόματη εξισορρόπηση , για να διατηρήσει την ισορροπία , οι κόμβοι θα πρέπει να εισαχθεί σε μια συγκεκριμένη σειρά . Η σειρά σε αυτό το παράδειγμα κώδικα είναι κατασκευασμένο για να κάνει τη συντομότερη και πιο αποτελεσματικό δυνατό δέντρο " . " b . ένθετο ( 20 )? b.insert ( 40 )? b.insert ( 10 )? b.insert ( 5 )? b.insert ( 45 )? b.insert ( 70 )? b.insert ( 60 )? b.insert ( 80 ) ? b.insert ( 55 )? b.insert ( 85 ) ? ""
Η 5

Προσπελαύνετε το δέντρο , που διέρχονται από το αριστερό δέντρο πρώτη, ακολουθούμενη από την δεξιά δέντρο και, στη συνέχεια , τέλος, η κόμβο ρίζας . Εάν χρησιμοποιείται αναδρομή για να κάνει τη διάσχιση postorder , η μέθοδος είναι μακρά τρεις μόνο γραμμές . στην περίπτωση αυτή , η στοίβα θα αυξηθεί μόνο στο ύψος του δένδρου . Δεδομένου ότι το δέντρο είναι ισορροπημένη και μικρές , αναδρομή δεν θα υπερχείλιση η στοίβα .
Η 6

Προσθήκη νέας μεθόδου στην κατηγορία BinaryTree ονομάζεται postorder . Εδώ , εκτυπώνει μόνο την αξία του κάθε κόμβου που επισκέπτεται . "" public void postorder ( ) {if ( αριστερά ! = null ) left.postorder ( ) ? αν ( δεξιά = null ) right.postorder ( ) ? ! System.out.println ( αξία ) ? } " "
Η 7

Εκτύπωση των κόμβων postorder καλώντας το . b.postorder μέθοδο μετά ένθετα σας " " b.postorder ( ) ? "
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα