Hvordan lage et binært tre i C

Strukturer ditt binære tre. Hvert binært tre vil trenge en struktur, selv om det bare har én variabel. Velg et navn, og bruk så typedef for å lage det: typedef struct student_data STUDENT_DATA;

Definer strukturen. Inkluder to pekere til samme struktur: struct student_data { int student_ID; int student_grade; STUDENT_DATA venstre, Ikke sant;};

Tildel en peker til denne datastrukturen, initialiser den til NULL, for å være treets hode: STUDENT_DATA *studenter = NULL;

Tildel to midlertidige pekere til datastrukturen: STUDENT_DATA ny student, cur_student;

Bruk malloc() for å lage et nytt element, og se alltid etter en feil: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Fyll ut feltene til det nye elementet. Sett venstre og høyre felt til NULL: new_student->student_ID = newID; new_student->student_size = newsize; ny_student->venstre = NULL; new_student->right = NULL;

Vurder hodevariabelen. Hvis hodevariabelen er NULL, er dette det første elementet som legges til treet, så sett hodevariabelen til å peke på den, og du er ferdig: if (!studenter) { students = new_student; komme tilbake; }

Håndter duplikatoppføringen hvis den nye verdien og den nåværende verdien er like: if (newID == cur_student->student_ID) { abort(); }

Håndtere ulik verdi. Hvis den nye verdien er mindre enn gjeldende verdi, går det nye elementet til venstre. Legg den til umiddelbart hvis det ikke er noe til venstre. Ellers, gå til venstre og sløyfe: if (nyID < cur_student->student_ID) { if (cur_student->venstre == NULL) { cur_student->venstre = nystudent; retur 1; } cur_student = cur_student->venstre;

Gjør det samme til høyre, ellers: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; retur 1; } cur_student = cur_student->right; }}

Lag en midlertidig variabel som peker til datastrukturen: STUDENT_DATA *cur_student;

Gå gjennom elementene og se etter ønsket verdi: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Gren til venstre eller høyre, og sløyfe, hvis den ikke finnes: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } annet { cur_student = cur_student->venstre; }

Se om løkken slutter. Hvis den gjør det, betyr det at du aldri fant elementet: }return 0;

Tildel det binære treet når programmet avsluttes, siden ikke alle operativsystemer vil håndtere dette automatisk. Dette gjøres best ved å bruke en rekursiv funksjon: void deallocate_binary_tree (STUDENT_DATA *tree) {

Dealloker venstre og høyre undertre rekursivt: dealloker_binært_tre (tre->venstre); dealloker_binært_tre (tre->høyre);

Søke og legge til binære trær kan også gjøres ved hjelp av rekursjon. Dette vil være mye lettere å skrive og vedlikeholde, men litt vanskeligere å forstå, før du blir vant til det. Det er vanlig å lage et binært tre som bare inneholder pekere inn i en andre C-datastruktur, ofte en matrise eller koblet liste, der de faktiske dataene ligger. Hvert binærtre er en indeks for raskt å søke i et enkelt felt med listedata.

Sletting fra et binært tre er en veldig komplisert algoritme i C, men i mange bruk av binære trær slettes aldri elementer.