Come creare un albero binario in C
Come creare un albero binario in C. Gli alberi binari in C sono un buon modo per organizzare dinamicamente i dati per una facile ricerca. Tuttavia, richiedono molto lavoro per essere mantenuti.
Crea l'albero binario
Passaggio 1
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;
Passaggio 2
Definisci la struttura. Includere due puntatori alla stessa struttura:struct student_data { int student_ID; int classe_studente; STUDENT_DATA sinistra, a destra;};
Passaggio 3
Assegna un puntatore a questa struttura dati, inizializzandolo su NULL, in modo che sia la testa dell'albero:STUDENT_DATA *students =NULL;
Aggiungi all'albero binario
Passaggio 1
Assegna due puntatori temporanei alla struttura dei dati:STUDENT_DATA new_student, cur_studente;
Passaggio 2
Usa malloc() per creare un nuovo elemento, controllando sempre la presenza di un errore:if ((new_student =malloc(sizeof(STUDENT_DATA))) ==NULL) { abort(); }
Passaggio 3
Popolare i campi del nuovo elemento. Imposta i suoi campi sinistro e destro su NULL:nuovo_studente->ID_studente =nuovo_ID;nuovo_studente->dimensione_studente =nuovo_dimensione;nuovo_studente->sinistra =NULL;nuovo_studente->destra =NULL;
Passaggio 4
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; }
Passaggio 5
Inizia dalla cima dell'albero:cur_student =studenti;while (cur_student) {
Passaggio 6
Gestisci la voce duplicata se il nuovo valore e il valore corrente sono uguali:if (newID ==cur_student->student_ID) { abort(); }
Passaggio 7
Affronta 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 in loop:if (newID
Passaggio 8
Fai la stessa cosa a destra, altrimenti:} else { if (cur_student->right ==NULL) { cur_student->right =newstudent; ritorno 1; } cur_student =cur_student->destra; }}
Cerca nell'albero binario
Passaggio 1
Crea una variabile temporanea che punta alla struttura dei dati:STUDENT_DATA *cur_student;
Passaggio 2
Imposta la tua variabile temporanea sulla variabile head:cur_student =Students_head;
Passaggio 3
Passa in rassegna gli elementi, controllando il valore desiderato:while (cur_student) { if (cur_student->student_ID ==15) { return cur_student->student_grade; }
Passaggio 4
Ramo a sinistra oa destra e loop, se non viene trovato:if (cur_student->student_ID <15) { cur_student =cur_student->right; } else { cur_student =cur_student->sinistra; }
Passaggio 5
Vedi se il ciclo finisce. Se lo fa, significa che non hai mai trovato l'oggetto:}return 0;
Pulisci
Passaggio 1
Dealloca 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) {
Passaggio 2
Osserva:se non c'è nessun albero, non c'è niente da fare:if (!tree) return;
Passaggio 3
Dealloca i sottoalberi sinistro e destro in modo ricorsivo:deallocate_binary_tree(tree->left); deallocate_binary_tree(tree->right);
Passaggio 4
Dealloca l'elemento e il gioco è fatto:free(tree);}
Suggerimento
La ricerca e l'aggiunta ad 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 ci si abitua. È comune creare un albero binario che contenga solo puntatori a una seconda struttura di dati C, spesso una matrice 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.
Avviso
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.