Δομή δυαδικό δέντρο σας . Κάθε δυαδικό δέντρο θα χρειαστεί μια δομή , ακόμη και αν έχει μόνο μία μεταβλητή . Επιλέξτε ένα όνομα , και στη συνέχεια χρησιμοποιήστε typedef για να δημιουργήσετε: typedef struct
student_data student_data ?
2Καθορίστε τη δομή . Περιλαμβάνει δύο δείκτες στην ίδια δομή : struct
student_data { int student_ID ? Int student_grade ? Student_data * αριστερά , δεξιά * ? } ?
Η 3Διαθέστε ένα δείκτη σε αυτή τη δομή δεδομένων , την προετοιμασία να NULL , για να είναι επικεφαλής του δέντρου :
student_data * μαθητές = NULL?
Προσθήκη στο Binary Tree
Η 4Διαθέστε δύο προσωρινές υποδείξεις ως προς τη δομή δεδομένων :
student_data * new_student , * cur_student ?
5Χρησιμοποιήστε malloc ( ) για να δημιουργήσετε ένα νέο στοιχείο , πάντα τον έλεγχο για ένα λάθος :
αν ( ( new_student = malloc ( sizeof ( student_data ) ) ) == NULL) { ματαίωση ( ) ? }
6Συμπλήρωση πεδίων του νέου στοιχείου . Ορίστε το αριστερό και το δεξί πεδία με NULL :
new_student - > student_ID = newid ? New_student - > student_size = newsize ? New_student - > αριστερά = NULL? New_student - > δεξιά = NULL? Σελίδα 7Εξετάστε το κεφάλι μεταβλητή . Αν η μεταβλητή της κεφαλής είναι NULL , αυτό είναι το πρώτο στοιχείο που προστίθεται στο δέντρο , έτσι ορίσετε τη μεταβλητή κεφάλι να επισημάνω σε αυτό , και είστε έτοιμοι :
αν ( οι μαθητές ! ) { Μαθητές = new_student ? Επιστροφή? }
8Ξεκινήστε από την κορυφή του δέντρου :
cur_student = φοιτητές ? ενώ ( cur_student ) { Τετάρτη 9Χειριστείτε τη διπλή καταχώρηση , εάν η νέα τιμή και η τρέχουσα αξία είναι ίση :
εάν ( newid == cur_student - > student_ID ) { ματαίωση ( ) ? }
10Deal με άνισες τιμές . Αν η νέα τιμή είναι μικρότερη από την τρέχουσα τιμή , το νέο στοιχείο πηγαίνει στα αριστερά. Προσθέστε αμέσως αν δεν υπάρχει τίποτα στα αριστερά . Διαφορετικά , Τράβερς αριστερά και loop :
αν ( newid student_ID ) {if ( cur_student - > αριστερά == NULL) { cur_student - > αριστερά = newstudent ? Επιστροφή 1? } Cur_student = cur_student - > αριστερά ?
11Κάντε το ίδιο πράγμα στα δεξιά , αλλιώς :
} else {if ( cur_student - > δεξιά == NULL) { cur_student - > δεξιά = newstudent ? επιστροφή 1? } cur_student = cur_student - > δεξιά? } }
Αναζήτηση στο Binary Tree
Η 12δημιουργήσετε μια προσωρινή μεταβλητή που δείχνει τη δομή των δεδομένων :
student_data * cur_student ? Τετάρτη 13Ορίστε προσωρινή μεταβλητή σας στο κεφάλι μεταβλητή :
cur_student = students_head ?
14Loop μέσα από τα στοιχεία , ο έλεγχος για την επιθυμητή τιμή :
ενώ ( cur_student ) {if ( cur_student - > student_ID == 15 ) { επιστροφή cur_student - > student_grade ? }
15Υποκατάστημα αριστερά ή δεξιά , και βρόχου , αν δεν βρεθεί :
αν ( cur_student - > student_ID cur_student = cur_student - > δεξιά? } else { cur_student = cur_student - > αριστερά? } Τετάρτη 16Δείτε αν ο βρόχος τελειώνει Αν το κάνει , αυτό σημαίνει ότι ποτέ δεν βρήκε το σημείο : .
} επιστροφή 0?
Η Clean Up
Η 17. να βρω τον ιδιοκτήτη του δυαδικού δέντρου , όταν τελειώνει το πρόγραμμά σας , καθώς δεν είναι όλα τα λειτουργικά συστήματα θα χειριστεί αυτό αυτόματα Αυτό γίνεται καλύτερα χρησιμοποιώντας μια αναδρομική συνάρτηση : void
deallocate_binary_tree ( student_data * δέντρο ) { Τετάρτη 18Προσέξτε : Εάν υπάρχει δεν είναι κάθε δέντρο , δεν υπάρχει τίποτα να κάνουμε : ( ! δέντρο )
εάν η επιστροφή ? Πέμπτη 19δεσμεύσει την αριστερή και δεξιά υποδένδρων αναδρομικά :
deallocate_binary_tree ( tree - > αριστερά ) ? deallocate_binary_tree ( δέντρο - > δεξιά)?
20δεσμεύσει το στοιχείο , και είστε έτοιμοι :
δωρεάν ( δέντρο ) ? }
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα