Kako ustvariti binarno drevo v C

click fraud protection

Strukturirajte svoje binarno drevo. Vsako binarno drevo bo potrebovalo strukturo, tudi če ima samo eno spremenljivko. Izberite ime in ga ustvarite z uporabo typedef: typedef struct student_data STUDENT_DATA;

Določite strukturo. Vključite dva kazalca na isto strukturo: struct student_data { int student_ID; int študent_razred; STUDENT_DATA levo, prav;};

Dodelite kazalec tej podatkovni strukturi in jo inicializirajte na NULL, da bo glava drevesa: STUDENT_DATA *students = NULL;

Podatkovni strukturi dodelite dva začasna kazalca: STUDENT_DATA nov_študent, cur_student;

Uporabite malloc(), da ustvarite nov element, pri čemer vedno preverite napako: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Izpolnite polja novega elementa. Nastavite levo in desno polje na NULL: new_student->student_ID = newID; nov_študent->velikost_študenta = velikost novice; nov_študent->levo = NULL; nov_študent->desno = NULL;

Upoštevajte spremenljivko glave. Če je spremenljivka glave NULL, je to prvi element, dodan drevesu, zato nastavite spremenljivko glave, da kaže nanjo, in končali ste: if (!students) { students = new_student; vrnitev; }

Obravnava podvojeni vnos, če sta nova vrednost in trenutna vrednost enaki: if (newID == cur_student->student_ID) { abort(); }

Obravnavajte neenake vrednote. Če je nova vrednost manjša od trenutne vrednosti, gre nov element na levo. Takoj ga dodajte, če na levi ni ničesar. V nasprotnem primeru pojdite levo in začnite: if (novID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; vrnitev 1; } cur_student = cur_student->levo;

Naredite isto stvar na desni, sicer: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; vrnitev 1; } cur_student = cur_student->desno; }}

Ustvarite začasno spremenljivko, ki kaže na strukturo podatkov: STUDENT_DATA *cur_student;

Prelistajte elemente in preverite želeno vrednost: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Veja levo ali desno in zanka, če je ni mogoče najti: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->left; }

Poglejte, ali se zanka konča. Če je, pomeni, da niste nikoli našli predmeta: }return 0;

Ko se vaš program konča, razveljavite binarno drevo, saj vsi operacijski sistemi tega ne bodo obravnavali samodejno. To je najbolje narediti z uporabo rekurzivne funkcije: void deallocate_binary_tree (STUDENT_DATA *tree) {

Rekurzivno razporedi levo in desno poddrevo: deallocate_binary_tree (drevo->levo); delocate_binary_tree (drevo->desno);

Iskanje in dodajanje v binarna drevesa se lahko izvaja tudi z uporabo rekurzije. To bo veliko lažje napisati in vzdrževati, a malo težje razumeti, dokler se ne navadiš. Običajno je ustvariti binarno drevo, ki vsebuje samo kazalce v drugo podatkovno strukturo C, pogosto matriko ali povezan seznam, kjer so dejanski podatki. Vsako binarno drevo je indeks za hitro iskanje posameznega polja podatkov seznama.

Brisanje iz binarnega drevesa je zelo zapleten algoritem v C, vendar se pri mnogih uporabah binarnih dreves elementi nikoli ne izbrišejo.