So erstellen Sie einen Binärbaum in C

Strukturieren Sie Ihren Binärbaum. Jeder Binärbaum benötigt eine Struktur, auch wenn er nur eine Variable hat. Wählen Sie einen Namen und verwenden Sie typedef, um ihn zu erstellen: typedef struct student_data STUDENT_DATA;

Definieren Sie die Struktur. Fügen Sie zwei Zeiger auf dieselbe Struktur ein: struct student_data { int student_ID; int student_note; STUDENT_DATA links, Rechts;};

Weisen Sie dieser Datenstruktur einen Zeiger zu und initialisieren Sie ihn mit NULL, um der Kopf des Baums zu sein: STUDENT_DATA *students = NULL;

Weisen Sie der Datenstruktur zwei temporäre Zeiger zu: STUDENT_DATA neuer Student, cur_student;

Verwenden Sie malloc(), um ein neues Element zu erstellen und immer auf Fehler zu prüfen: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Füllen Sie die Felder des neuen Elements aus. Setzen Sie die linken und rechten Felder auf NULL: new_student->student_ID = newID; new_student->student_size = newsize; new_student->left = NULL; new_student->right = NULL;

Betrachten Sie die Kopfvariable. Wenn die Variable head NULL ist, ist dies das erste Element, das dem Baum hinzugefügt wird. Setzen Sie also die Variable head so, dass sie darauf zeigt, und Sie sind fertig: if (!students) { Students = new_student; Rückkehr; }

Behandeln Sie den doppelten Eintrag, wenn der neue Wert und der aktuelle Wert gleich sind: if (newID == cur_student->student_ID) { abort(); }

Umgang mit ungleichen Werten. Wenn der neue Wert kleiner als der aktuelle Wert ist, wird das neue Element nach links verschoben. Fügen Sie es sofort hinzu, wenn nichts mehr übrig ist. Andernfalls traverse nach links und Schleife: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; 1 zurückgeben; } cur_student = cur_student->links;

Machen Sie dasselbe rechts, ansonsten: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; 1 zurückgeben; } cur_student = cur_student->right; }}

Erstellen Sie eine temporäre Variable, die auf die Datenstruktur zeigt: STUDENT_DATA *cur_student;

Durchlaufen Sie die Elemente und prüfen Sie den gewünschten Wert: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Verzweige nach links oder rechts und schleife, wenn es nicht gefunden wird: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->left; }

Sehen Sie, ob die Schleife endet. Wenn dies der Fall ist, bedeutet dies, dass Sie das Element nie gefunden haben: }return 0;

Geben Sie den Binärbaum frei, wenn Ihr Programm endet, da dies nicht von allen Betriebssystemen automatisch verarbeitet wird. Dies geschieht am besten mit einer rekursiven Funktion: void deallocate_binary_tree (STUDENT_DATA *tree) {

Die Zuordnung der linken und rechten Teilbäume rekursiv aufheben: deallocate_binary_tree (tree->left); deallocate_binary_tree (Baum->rechts);

Das Suchen und Hinzufügen zu Binärbäumen kann auch mit Rekursion erfolgen. Dies wird viel einfacher zu schreiben und zu warten sein, aber etwas schwieriger zu verstehen, bis Sie sich daran gewöhnt haben. Es ist üblich, einen binären Baum zu erstellen, der nur Zeiger auf eine zweite C-Datenstruktur enthält, oft ein Array oder eine verknüpfte Liste, in der sich die tatsächlichen Daten befinden. Jeder Binärbaum ist ein Index zum schnellen Durchsuchen eines einzelnen Felds der Listendaten.

Das Löschen aus einem Binärbaum ist in C ein sehr komplizierter Algorithmus, aber bei vielen Anwendungen von Binärbäumen werden Elemente nie gelöscht.