Binary træer i C er en god måde at dynamisk organisere data for nem søgning. Men de kræver en masse arbejde at vedligeholde. Instruktioner
Opret Binary Tree
1
Struktur din binært træ . Hver binært træ har brug for en struktur , selv om det kun har én variabel. Vælg et navn , og derefter bruge typedef at skabe det :
typedef struct student_data STUDENT_DATA ,
2 Definer struktur. Medtag to henvisninger til den samme struktur :
struct student_data { int student_ID , int student_grade , STUDENT_DATA * venstre, * højre ;} ;
3 allokere en pegepind til denne datastruktur , initialisering det til NULL , for at være træet hoved :
STUDENT_DATA * elever = NULL ;
Tilføj til Binary Tree
4 Afsætte to midlertidige pegepinde til datastruktur:
STUDENT_DATA * new_student , * cur_student ,
5 Brug malloc () for at oprette et nyt element , altid kontrollere for fejl :
if ( ( new_student = malloc ( sizeof ( STUDENT_DATA ))) == NULL) { abort ( );}
6 befolke nye elementets felter. Fastsætte sine venstre og højre felter NULL :
new_student -> student_ID = newid , new_student -> student_size = newsize , new_student -> venstre = NULL ; new_student -> højre = NULL ;
7 Overvej hovedet variabel . Hvis hovedet variabel er NULL , dette er det første element føjes til træet , så sæt hovedet variable til at pege på det, og du er færdig :
hvis { elever = new_student , vende tilbage;} < (studerende !) br > 8. Start i toppen af træet :
cur_student = studerende , mens ( cur_student ) {
9 Håndter kopi af posten , hvis den nye værdi og aktuelle værdi er ens:
if ( newid == cur_student -> student_ID ) { abort ( );}
10 Deal med ulige værdier. Hvis den nye værdi er mindre end den aktuelle værdi , det nye element går til venstre . Tilføj det samme, hvis der ikke er noget til venstre. Ellers travers til venstre og loop :
if ( newid student_ID ) { if ( cur_student -> venstre == NULL) { cur_student -> venstre = newstudent , tilbagevenden 1; } cur_student = cur_student -> til venstre;
11 < p> Gør det samme på højre , ellers : } else {if ( cur_student -> højre == NULL) { cur_student -> højre = newstudent , tilbagevenden 1; } cur_student = cur_student -> højre ;}} < br >
Søg i Binary Tree
12 Opret en midlertidig variabel peger på den datastruktur:
STUDENT_DATA * cur_student ,
13 Indstil din midlertidige variabel til hovedet variabel :
cur_student = students_head ,
14 Loop gennem de elementer , kontrol for den ønskede værdi :
while ( cur_student ) { if ( cur_student -> student_ID == 15) {return cur_student -> student_grade ;}
15 Branch til venstre eller højre , og loop , hvis det ikke er fundet:
if ( cur_student -> student_ID cur_student = cur_student -> højre ;} else { cur_student = cur_student -> venstre ;}
16 Se om løkken slutter Hvis den gør , betyder det, at du aldrig fundet punktet : .
} tilbagevenden 0;
Clean Up
17 deallocate den binære træ, når dit program slutter , da ikke alle operativsystemer vil håndtere dette automatisk dette gøres bedst ved hjælp af en rekursiv funktion : .
void deallocate_binary_tree ( STUDENT_DATA * træ) {
18 Overhold : Hvis der ikke er ikke noget træ , der er intet at gøre:
hvis tilbagevenden
19 deallocate venstre og højre undertræer rekursivt ( træ! ) :
deallocate_binary_tree ( træ -> venstre) , deallocate_binary_tree ( træ -> højre )
20 deallocate elementet , og du er færdig :
gratis ( træ) ;}