Sådan opretter du et binært træ i C

Strukturer dit binære træ. Ethvert binært træ har brug for en struktur, selvom det kun har én variabel. Vælg et navn, og brug derefter typedef til at oprette det: typedef struct student_data STUDENT_DATA;

Definer strukturen. Inkluder to pointere til den samme struktur: struct elev_data { int elev_ID; int elev_grade; STUDENT_DATA venstre, ret;};

Tildel en pointer til denne datastruktur, initialiser den til NULL, for at være træets hoved: STUDENT_DATA *students = NULL;

Tildel to midlertidige pointere til datastrukturen: STUDENT_DATA ny_elev, cur_student;

Brug malloc() til at oprette et nyt element, og tjek altid for en fejl: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Udfyld det nye elements felter. Indstil venstre og højre felter til NULL: new_student->student_ID = newID; ny_elev->elev_størrelse = nyhedsstørrelse; new_student->left = NULL; new_student->right = NULL;

Overvej hovedvariablen. Hvis head-variablen er NULL, er dette det første element, der tilføjes til træet, så sæt head-variablen til at pege på det, og du er færdig: if (!students) { students = new_student; Vend tilbage; }

Håndter duplikatindtastningen, hvis den nye værdi og den nuværende værdi er ens: if (nyt ID == cur_student->student_ID) { abort(); }

Håndtere ulige værdier. Hvis den nye værdi er mindre end den aktuelle værdi, går det nye element til venstre. Tilføj det med det samme, hvis der ikke er noget til venstre. Ellers, gå til venstre og løkke: if (nyt-id < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; retur 1; } cur_student = cur_student->venstre;

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

Opret en midlertidig variabel, der peger på datastrukturen: STUDENT_DATA *cur_student;

Gå gennem elementerne og kontroller for den ønskede værdi: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Forgrening til venstre eller højre, og loop, hvis den ikke findes: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } andet { cur_student = cur_student->venstre; }

Se om løkken slutter. Hvis det gør, betyder det, at du aldrig har fundet elementet: }return 0;

Tildel det binære træ, når dit program slutter, da ikke alle operativsystemer vil håndtere dette automatisk. Dette gøres bedst ved at bruge en rekursiv funktion: void deallocate_binary_tree (STUDENT_DATA *tree) {

Deallokér venstre og højre undertræer rekursivt: dealloker_binært_træ (træ->venstre); dealloker_binært_træ (træ->højre);

Søgning og tilføjelse til binære træer kan også udføres ved hjælp af rekursion. Dette vil være meget nemmere at skrive og vedligeholde, men lidt sværere at forstå, indtil du vænner dig til det. Det er almindeligt at oprette et binært træ, der kun indeholder pointere til en anden C-datastruktur, ofte et array eller en sammenkædet liste, hvor de faktiske data findes. Hvert binært træ er et indeks til hurtigt at søge i et enkelt felt med listedata.

Sletning fra et binært træ er en meget kompliceret algoritme i C, men i mange anvendelser af binære træer slettes elementer aldrig.