alberi binari in C sono un buon modo per organizzare dinamicamente i dati per facilitarne la ricerca . Tuttavia, richiedono un sacco di lavoro da mantenere.
Istruzioni Creare l' albero binario
1
Struttura tuo albero binario . Ogni albero binario avrà bisogno di una struttura , anche se ha una sola variabile . Scegli un nome , quindi utilizzare typedef per crearlo :
typedef struct student_data STUDENT_DATA ;
2 definire la struttura . Includere due puntatori alla stessa struttura: struct
student_data { int student_id ; int student_grade ; STUDENT_DATA * a sinistra , a destra * ;} ;
3 assegnare un puntatore a questa struttura dati , inizializzazione di NULL , di essere la testa di albero :
STUDENT_DATA * studenti = NULL;
Aggiungi al binario albero
4 Allocare due puntatori temporanei della struttura dati :
STUDENT_DATA new_student * , * cur_student ;
5 Usa malloc ( ) per creare un nuovo elemento , il controllo sempre per un errore :
if ( ( new_student = malloc ( sizeof ( STUDENT_DATA ) ) ) == NULL ) { abort (); } Pagina 6 popolare i campi del nuovo elemento . Impostare i campi di destra e sinistra per NULL :
new_student - > student_id = newid ; new_student - > student_size = newsize ; new_student - > sinistro = NULL; new_student - > destra = NULL;
7 consideri la testa variabile . Se la variabile di testa è NULL , questo è il primo elemento aggiunto alla struttura , in modo da impostare la testa variabile per puntare a esso , e il gioco è fatto :
se { studenti = new_student ; return; } < (studenti ! ) br> 8 Inizia la parte superiore della struttura :
cur_student = studenti , mentre ( cur_student ) { Pagina 9 Maneggiare la voce duplicata se il nuovo valore e il valore corrente sono uguali :
if ( newid == cur_student - > student_id ) { abort (); }
10 Deal con valori diversi . Se il nuovo valore è inferiore al valore corrente , il nuovo elemento va sulla sinistra . Aggiungere immediatamente se non c'è niente di sinistra . In caso contrario , traversa a sinistra e loop :
se ( newid student_id ) {if ( cur_student - > sinistro == NULL) { cur_student - > sinistro = newstudent ; return 1; } cur_student = cur_student - > sinistro ;
11 < p > Fate la stessa cosa a destra , altrimenti : } else {if ( cur_student - > destro == NULL) { cur_student - > destra = newstudent ; return 1; } cur_student = cur_student - > destra ; } }
Cerca il file binario Albero
12 Creare una variabile temporanea che punta alla struttura dati :
STUDENT_DATA * cur_student ; Pagina 13 la variabile temporanea per la testa variabile :
cur_student = students_head ; Pagina 14 loop attraverso gli elementi , il controllo per il valore desiderato :
mentre ( cur_student ) {if ( cur_student - > student_id == 15) {return cur_student - > student_grade ; }
15 Filiale di sinistra o di destra , e loop , se non viene trovato :
se ( cur_student - > student_id cur_student = cur_student - > destra ; } else { cur_student = cur_student - > left; } Pagina 16 Vedere se il ciclo termina Se lo fa , significa che non hai mai trovato l' articolo: .
} return 0;
Clean Up
17 deallocare l'albero binario quando il programma termina , come non tutti i sistemi operativi sono in grado di gestire questo automaticamente questo è fatto meglio utilizzando una funzione ricorsiva : .
vuoto deallocate_binary_tree ( STUDENT_DATA * albero ) {
18 Osservare : se c'è non è un albero , non c'è niente da fare : se
ritorno ;
19 deallocare i sottoalberi sinistro e destro in modo ricorsivo ( albero ! ) :
deallocate_binary_tree ( albero - > sinistra) ; deallocate_binary_tree ( albero - > a destra) ;
20 deallocare l'elemento , e il gioco è fatto :
libero ( albero );}