Binary Bäume in C sind ein guter Weg , um dynamisch Daten organisieren für die einfache Suche . Allerdings erfordern sie eine Menge Arbeit zu pflegen. Anleitung
Erstellen des Binary Tree
1
Struktur Ihrer binären Baum . Jeder Binärbaum müssen eine Struktur , auch wenn es nur eine Variable . Wählen Sie einen Namen , dann verwenden Sie typedef , es zu schaffen :
typedef struct student_data STUDENT_DATA ; Seite 2 definieren die Struktur. Fügen Sie zwei Zeiger auf der gleichen Struktur : struct
student_data {int STUDENT_ID ; int student_grade ; STUDENT_DATA * links * rechts ; };
3 Vergeben Sie einen Zeiger auf diese Datenstruktur initialisiert wird NULL , um den Baum zu Kopf sein :
STUDENT_DATA * Studenten = NULL;
der Binary Tree
4 hinzufügen Weisen zwei temporäre Zeiger auf die Datenstruktur:
STUDENT_DATA * new_student , * cur_student ;
5 Nutzungsbedingungen malloc (), um ein neues Element zu erstellen , immer Überprüfung für einen Fehler :
if (( new_student = malloc ( sizeof ( STUDENT_DATA ))) == NULL) { abort () ;} Seite 6 Auffüllen des neuen Elements auf den Feldern . Legen Sie die linke und rechte Felder NULL :
new_student -> STUDENT_ID = newID ; new_student -> student_size = NewSize ; new_student -> links = NULL; new_student -> rechts = NULL; Seite 7 Betrachten der Kopf Variable. Wenn der Kopf Variable NULL ist, ist dies das erste Element hinzugefügt , um den Baum , so stellen Sie den Kopf Variable auf ihn verweisen , und du bist fertig :
if { Studenten = new_student ; return;} < ( Studenten! ) br> 8 Start an der Spitze des Baumes :
cur_student = Studenten; while ( cur_student ) {
9 Behandeln Sie den doppelten Eintrag , wenn der neue Wert und den aktuellen Wert gleich sind :
if ( newID == cur_student -> STUDENT_ID ) { abort () ;}
10 Deal mit ungleichen Werten . Wenn der neue Wert kleiner ist als der aktuelle Wert , geht das neue Element auf der linken Seite . Fügen Sie es sofort , wenn es gibt nichts auf der linken Seite . Ansonsten verlassen Traverse und Schleife :
if ( newID STUDENT_ID ) {if ( cur_student - > left == NULL) { cur_student -> links = newstudent ; return 1; } cur_student = cur_student -> links ; Seite 11 < p> Machen Sie dasselbe auf der rechten Seite , sonst : } else {if ( cur_student -> rechts == NULL) { cur_student -> rechts = newstudent ; return 1; } cur_student = cur_student - > right ;}}
Suche im Binary Tree
12 erstellen Sie eine temporäre Variable, die auf der Datenstruktur:
STUDENT_DATA * cur_student ; seite 13 Stellen Sie Ihre temporären Variablen auf den Kopf Variable :
cur_student = students_head ;
14 Schleife durch die Elemente , die Überprüfung für den gewünschten Wert :
while ( cur_student ) {if ( cur_student -> STUDENT_ID == 15 ) {return cur_student -> student_grade ;}
15 Ast nach links oder rechts , und Schleife , wenn es nicht gefunden wird :
if ( cur_student -> STUDENT_ID cur_student = cur_student - > right ; } else { cur_student = cur_student - > left ;}
16 sehen Sie, wenn die Schleife endet, wenn es funktioniert, es heißt, Sie fand nie den Titel: .
} return 0;
Clean Up
17 deallocate den binären Baum, wenn Ihr Programm beendet ist, da nicht alle Betriebssysteme diese automatisch verarbeiten Dies geschieht am besten unter Verwendung eines rekursiven Funktion : .
nichtig deallocate_binary_tree ( STUDENT_DATA *-Baum ) {
18 beachten Sie : Wenn es ist nicht jeder Baum , es gibt nichts zu tun :
wenn return;
19 Deallocate die linke und rechte Teilbäume rekursiv ( Baum! ) :
deallocate_binary_tree ( tree-> links); deallocate_binary_tree ( Baum -> rechts);
20 Deallocate das Element , und du bist fertig :
kostenlos ( Baum );}