Δημιουργήστε μια λειτουργία κατάστημα που λαμβάνει ο κόμβος ρίζας . Κάθε φορά που θα ασχοληθεί με τα δέντρα στην επιστήμη των υπολογιστών , ο πιο αποτελεσματικός αλγόριθμος σχεδόν πάντα θα είναι αναδρομική και την αποθήκευση του δέντρου σε ένα αρχείο δεν θα αποτελέσει εξαίρεση . Εδώ είναι ένας σκελετός δείγμα της λειτουργίας αναδρομικών κατάστημα ( σε Java ) . Δημόσια κατάστημα void ( κόμβος n ) ρίχνει IOException { ... } 2
Γράψτε στοιχεία σχετικά με ριζικό κόμβο στο αρχείο . Αυτό θα χρησιμοποιήσει « διάσχιση προ-παραγγελία " ( Root , Αριστερά παιδιών , το δικαίωμα του παιδιού ) να περάσουν από όλους τους κόμβους στο δέντρο , επειδή αυτή η μέθοδος της διάσχισης θα καταστήσει ευκολότερο να ανακατασκευάσει το δέντρο από τη σειρά των κόμβων στο αρχείο . Η αναδρομική συνάρτηση μοιάζει τώρα με αυτό : public void κατάστημα ( Κόμβος n ) ρίχνει IOException { write ( savefile , n ) ? } Κατάστημα θα πρέπει να ζητήσει η ίδια με την Αριστερά Παιδί: δημόσια αποθήκη void ( κόμβος n ) ρίχνει IOException { write ( savefile , n ) ? κατάστημα ( n.left ) ? } Κατάστημα θα πρέπει να ζητήσει η ίδια με τη Δεξιά Παιδί: δημόσια αποθήκη void ( κόμβος n ) ρίχνει IOException { write ( savefile , n ) ? κατάστημα ( n.left ) ? κατάστημα ( n.right ) ? }
εικόνων 3
διπλό βεβαιωθείτε ότι η λειτουργία περνάει τον επαναληπτικό πίνακα ελέγχου . Για να αποφύγετε σφάλματα υπερχείλισης στοίβας , να ελέγχετε πάντα ότι μια αναδρομική συνάρτηση πληροί τις ακόλουθες προϋποθέσεις : Μήπως η λειτουργία έχει μια κατάσταση εξόδου ; Ναι , εφ 'όσον το δέντρο δεν είναι άπειρο βάθος , τελικά θα φτάσει σε ένα κόμβο που δεν έχει ούτε έναν αριστερό ή το δεξί παιδί και θα exit.Does η κάθε επανάληψη της λειτουργίας προσεγγίσουν την κατάσταση εξόδου ; Ναι , νοουμένου ότι το δέντρο δεν είναι κυκλική και κανένας κόμβος έχει ένα από τα δικά τους προγόνους του ως συνάρτηση child.The περνά τη λίστα ελέγχου .
Η 4
Ανακατασκευάσει από το αρχείο . Όταν έρχεται η ώρα να φορτώσετε το δέντρο πίσω από το αρχείο , θα εισάγετε απλά κάθε κόμβο στο δέντρο , όπως φορτώνεται από το αρχείο χρησιμοποιώντας το τυποποιημένο αλγόριθμο παρεμβολής. Αυτό θα πρέπει να ξεκινήσει από τη ρίζα και το έργο το δρόμο του προς τα κάτω χρησιμοποιώντας διάσχιση προ-παραγγελία , τοποθετώντας το νέο κόμβο στο πρώτο κενό χώρο μέσα στον οποίο θα ταιριάζει . Αυτό θα πρέπει να ανακατασκευάσει το δέντρο ακριβώς όπως είχε αρχικά αποτελείται σε O ( n log n ) κατά μέσο όρο .
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα