Cum se creează un arbore binar în C

click fraud protection

Structurați-vă arborele binar. Fiecare arbore binar va avea nevoie de o structură, chiar dacă are o singură variabilă. Alegeți un nume, apoi utilizați typedef pentru al crea: typedef struct student_data STUDENT_DATA;

Definiți structura. Includeți doi pointeri către aceeași structură: struct student_data { int student_ID; int student_grade; STUDENT_DATA stânga, dreapta;};

Alocați un pointer acestei structuri de date, inițialându-l la NULL, pentru a fi capul arborelui: STUDENT_DATA *students = NULL;

Alocați doi pointeri temporari structurii de date: STUDENT_DATA student nou, cur_student;

Utilizați malloc() pentru a crea un element nou, verificând întotdeauna o eroare: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Populați câmpurile noului element. Setați câmpurile din stânga și din dreapta la NULL: new_student->student_ID = newID; new_student->student_size = newsize; student_nou->stânga = NULL; student_nou->dreapta = NULL;

Luați în considerare variabila cap. Dacă variabila head este NULL, acesta este primul element adăugat în arbore, așa că setați variabila head pentru a indica ea și ați terminat: if (!students) { elevi = new_student; întoarcere; }

Gestionați intrarea duplicată dacă noua valoare și valoarea curentă sunt egale: if (newID == cur_student->student_ID) { abort(); }

Faceți față cu valori inegale. Dacă noua valoare este mai mică decât valoarea curentă, noul element merge la stânga. Adăugați-l imediat dacă nu este nimic în stânga. În caz contrar, traversați stânga și bucla: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; întoarcere 1; } cur_student = cur_student->left;

Faceți același lucru în dreapta, altfel: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; întoarcere 1; } cur_student = cur_student->right; }}

Creați o variabilă temporară care să indice structura de date: STUDENT_DATA *cur_student;

Buclă prin elemente, verificând valoarea dorită: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Ramura stanga sau dreapta, si bucla, daca nu este gasita: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->left; }

Vezi dacă bucla se termină. Dacă o face, înseamnă că nu ați găsit niciodată articolul: }return 0;

Dealocați arborele binar când programul dvs. se termină, deoarece nu toate sistemele de operare se vor descurca automat. Acest lucru se face cel mai bine folosind o funcție recursivă: void deallocate_binary_tree (STUDENT_DATA *tree) {

Dealocați subarborele din stânga și din dreapta în mod recursiv: deallocate_binary_tree (tree->left); deallocate_binary_tree (arborele->dreapta);

Căutarea și adăugarea în arbori binari se pot face și folosind recursiunea. Acest lucru va fi mult mai ușor de scris și de întreținut, dar puțin mai greu de înțeles, până te vei obișnui. Este obișnuit să se creeze un arbore binar care conține doar pointeri într-o a doua structură de date C, adesea o matrice sau o listă legată, în care se află datele reale. Fiecare arbore binar este un index pentru a căuta rapid un singur câmp al datelor din listă.

Ștergerea dintr-un arbore binar este un algoritm foarte complicat în C, dar în multe utilizări ale arborilor binari, elementele nu sunt niciodată șterse.