Binära träd i C är ett bra sätt att dynamiskt organisera data för enkel sökning . Däremot kräver de en hel del arbete att underhålla . Instruktioner
Skapa Binary Tree
1
Struktur din binärt träd . Varje binärt träd behöver en struktur , även om den bara har en variabel . Välj ett namn och sedan använda typedef för att skapa det :
typedef struct student_data STUDENT_DATA , Sida 2 Definiera strukturen . Inkludera två pekare till samma struktur :
struct student_data { int student_ID , int student_grade ; STUDENT_DATA * vänster , * höger , };
3 tilldela en pekare till denna datastruktur , initierade den till NULL , vara trädets huvud :
STUDENT_DATA * studenter = null;
Lägg till Binary Tree
4 Tilldela två tillfälliga pekare till datastruktur :
STUDENT_DATA * new_student , * cur_student ,
5 Använd malloc ( ) för att skapa ett nytt element , alltid kontrollera för fel :
if ( ( new_student = malloc ( sizeof ( STUDENT_DATA ) ) ) == NULL ) { abort ( ) ;}
6 fylla i den nya elementets fält . Ställ den vänstra och högra fälten till NULL :
new_student - > student_ID = newid ; new_student - > student_size = newsize , new_student - > vänster = null; new_student - > höger = null;
7 Tänk huvudet variabel. Om huvudet variabeln är NULL , är detta den första delen läggas till trädet , så satt huvudet variabeln att peka på det , och du är klar :
om { studenter = new_student , avkastning; } < ( studenter ! ) br > 8 Börja längst upp i trädet :
cur_student = studerande , medan ( cur_student ) {
9 Hantera dubblerade posten om det nya värdet och aktuellt värde är lika :
if ( newid == cur_student - > student_ID ) { abort ( ) ;}
10 Deal med ojämlika värderingar . Om det nya värdet är mindre än det aktuella värdet , går det nya elementet till vänster . Lägg det omedelbart om det finns ingenting på vänster . Annars , travers vänster och loop :
om ( newid student_ID ) {if ( cur_student - > vänster == null ) { cur_student - > vänster = newstudent , avkastning 1 ; } cur_student = cur_student - > vänster ,
11 Gör samma sak på höger , annars :
} else {if ( cur_student - > höger == null ) { cur_student - > höger = newstudent , avkastning 1 ; } cur_student = cur_student - > höger ;} }
sökning på Binary Tree
12 Skapa en temporär variabel som pekar till den datastruktur :
STUDENT_DATA * cur_student ,
13 Ställ din temporär variabel till huvudet variabel :
cur_student = students_head ,
14 Loop genom elementen , kontroll av det önskade värdet :
samtidigt ( cur_student ) {if ( cur_student - > student_ID == 15 ) {return cur_student - > student_grade ; }
15 Branch vänster eller höger , och en slinga , om det inte finns :
if ( cur_student - > student_ID cur_student = cur_student - > höger ;} else { cur_student = cur_student - > vänster ; }
16 Se om slingan avslutas Om den gör det , betyder det att du aldrig hittade objektet : .
} avkastning 0;
Clean Up
17 deallokera det binära trädet när programmet avslutas , eftersom inte alla operativsystem kommer att hantera detta automatiskt detta görs bäst med en rekursiv funktion : .
void deallocate_binary_tree ( STUDENT_DATA * trädet ) {
18 Observera : Om det är inte något träd , det finns inget att göra :
om återvändande ,
19 deallokera vänster och höger underträden rekursivt ( träd ! ) :
deallocate_binary_tree ( tree - > vänster ) , deallocate_binary_tree ( träd - > höger ) ,
20 deallokera elementet , och du är klar :
gratis ( träd ) ;} Addera