Come creare un albero binario in C

Struttura il tuo albero binario. Ogni albero binario avrà bisogno di una struttura, anche se ha solo una variabile. Scegli un nome, quindi usa typedef per crearlo: typedef struct student_data STUDENT_DATA;

Definire la struttura. Includere due puntatori alla stessa struttura: struct student_data { int student_ID; int student_grade; DATI_STUDENT sinistra, Giusto;};

Assegna un puntatore a questa struttura dati, inizializzandola su NULL, per essere la testa dell'albero: STUDENT_DATA *students = NULL;

Assegna due puntatori temporanei alla struttura dati: STUDENT_DATA nuovo studente, cur_studente;

Usa malloc() per creare un nuovo elemento, controllando sempre la presenza di un errore: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Popolare i campi del nuovo elemento. Imposta i suoi campi sinistro e destro su NULL: new_student->student_ID = newID; new_student->student_size = newsize; nuovo_studente->sinistra = NULL; nuovo_studente->destro = NULL;

Considera la variabile head. Se la variabile head è NULL, questo è il primo elemento aggiunto all'albero, quindi imposta la variabile head in modo che punti ad essa e il gioco è fatto: if (!students) { student = new_student; Restituzione; }

Gestire la voce duplicata se il nuovo valore e il valore corrente sono uguali: if (newID == cur_student->student_ID) { abort(); }

Gestire valori disuguali. Se il nuovo valore è inferiore al valore corrente, il nuovo elemento va a sinistra. Aggiungilo immediatamente se non c'è niente a sinistra. Altrimenti, attraversa a sinistra e ripeti: if (newID < cur_student->student_ID) { if (cur_student->left == NULL) { cur_student->left = newstudent; ritorno 1; } cur_student = cur_student->sinistra;

Fai la stessa cosa a destra, altrimenti: } else { if (cur_student->right == NULL) { cur_student->right = newstudent; ritorno 1; } cur_student = cur_student->right; }}

Crea una variabile temporanea che punti alla struttura dati: STUDENT_DATA *cur_student;

Ciclare gli elementi, verificando il valore desiderato: while (cur_student) { if (cur_student->student_ID == 15) { return cur_student->student_grade; }

Dirama a sinistra oa destra, e ripeti, se non viene trovato: if (cur_student->student_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student->sinistra; }

Vedi se il ciclo finisce. Se lo fa, significa che non hai mai trovato l'elemento: }return 0;

Deallocare l'albero binario al termine del programma, poiché non tutti i sistemi operativi lo gestiranno automaticamente. È meglio farlo usando una funzione ricorsiva: void deallocate_binary_tree (STUDENT_DATA *tree) {

Deallocare ricorsivamente i sottoalberi sinistro e destro: deallocate_binary_tree (tree->left); deallocate_binary_tree (albero->destra);

La ricerca e l'aggiunta agli alberi binari possono essere eseguite anche utilizzando la ricorsione. Sarà molto più facile da scrivere e mantenere, ma un po' più difficile da capire, finché non ti ci abituerai. È comune creare un albero binario che contenga solo puntatori a una seconda struttura di dati C, spesso un array o un elenco collegato, in cui risiedono i dati effettivi. Ogni albero binario è un indice per cercare rapidamente un singolo campo dei dati dell'elenco.

L'eliminazione da un albero binario è un algoritmo molto complicato in C, ma in molti usi degli alberi binari gli elementi non vengono mai eliminati.