Binære trær i C er en god måte å dynamisk organisere data for enkel søking . De krever imidlertid mye arbeid å vedlikeholde. Instruksjoner
Opprett Binary Tre
en
Struktur din binære treet . Hver binærtreet trenger en struktur , selv om den bare har én variabel . Velg et navn , og deretter bruke typedef å lage det :
typedef struct student_data STUDENT_DATA ;
2 Definer strukturen. Inkluderer to pekere til samme struktur :
struct student_data { int student_ID ; int student_grade ; STUDENT_DATA * igjen *, rett ;} ;
3 tildele en peker til denne datastruktur , klargjør den til NULL , for å være treets hodet :
STUDENT_DATA * studentene = NULL ;
Legg til Binary tre
4 Fordele to midlertidige pekere til data struktur:
STUDENT_DATA * new_student , * cur_student ;
5 bruk malloc () for å opprette et nytt element , alltid se etter en feil:
if ( ( new_student = malloc ( sizeof ( STUDENT_DATA ) ) ) == NULL) { abort (); }
6 fylle ut den nye elementets felt. Satt sin venstre og høyre felt til NULL :
new_student - > student_ID = newID ; new_student - > student_size = newsize ; new_student - > venstre = NULL ; new_student - > høyre = NULL ;
7 Tenk hodet variabel. Hvis hodet variabelen er NULL , er dette det første elementet lagt til treet , så satt hodet variabel til å peke på det , og du er ferdig :
hvis { studentene = new_student ; return; } < ( studenter ! ) br > 8 start med toppen av treet :
cur_student = studenter , mens ( cur_student ) {
9 Håndter duplikatoppføringen hvis den nye verdien og nåværende verdi er lik :
if ( newID == cur_student - > student_ID ) { abort (); }
10 Deal med ulike verdier . Hvis den nye verdi er mindre enn den gjeldende verdi , går det nye element til venstre. Legg det umiddelbart hvis det er ingenting til venstre. Ellers travers venstre og bue:
if ( newID student_ID ) { if ( cur_student - > venstre == NULL) { cur_student - > venstre = newstudent ; tilbake 1; } cur_student = cur_student - > venstre ;
11 < p> Gjør det samme på høyre side, ellers : } else { if ( cur_student - > høyre == NULL) { cur_student - > høyre = newstudent ; tilbake 1; } cur_student = cur_student - > høyre ;} }
Søk i Binary Tre
12 Opprett en midlertidig variabel som peker til data struktur:
STUDENT_DATA * cur_student ;
13 Sett midlertidig variabel til hodet variable :
cur_student = students_head ;
14 Loop gjennom elementene , sjekke for ønsket verdi :
while ( cur_student ) { if ( cur_student - > student_ID == 15 ) {return cur_student - > student_grade ;}
15 Branch til venstre eller høyre , og loop, hvis det ikke er funnet:
if ( cur_student - > student_ID cur_student = cur_student - > høyre ;} else { cur_student = cur_student - > venstre ; }
16 Se om loopen ender Hvis den gjør det , betyr det at du aldri funnet elementet : .
} return 0 ;
Clean Up
17 deallocate det binære treet når programmet avsluttes, som ikke alle operativsystemer vil håndtere dette automatisk dette gjøres best ved hjelp av en rekursiv funksjon : .
void deallocate_binary_tree ( STUDENT_DATA * tree) {
18 Observer : Hvis det er ikke noe tre , det er ingenting å gjøre:
hvis retur,
19 deallocate venstre og høyre undertreene rekursivt ( tre! ) :
deallocate_binary_tree ( tree- > venstre) ; deallocate_binary_tree (tree - > høyre) ;
20 deallocate elementet , og du er ferdig :
gratis ( tre) ;}