/ Published in: C++
Datoteka zaglavlja za "main_drvo.cpp" iz kolegija Strukture podataka, zadaća 4.
Operacije nad općenitim stablom
Operacije nad općenitim stablom
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
struct elem{ char label; int dijete, brat; }; struct drvo{ elem polje[10000]; int korijen; }; drvo *InitT(int x, drvo *T){ T= new drvo; for(int i= 0; i < 10000; i++){ T-> polje[i].label= ' '; T-> polje[i].dijete= -1; T-> polje[i].brat= -1; } T-> polje[x].label= 'A'; T-> korijen= x; return T; } int FirstChildT(int n, drvo *T){ return T-> polje[n].dijete; } int NextSiblingT(int n, drvo *T){ return T-> polje[n].brat; } int LabelT(int n, drvo *T){ return T-> polje[n].label; } int RootT(drvo *T){ return T-> korijen; } void ChangeLabelT(char x, int n, drvo *T){ T-> polje[n].label= x; } int ParentT(int n, drvo *T){ for(int i= 0; i < 10000; i++){ if(T-> polje[i].dijete== n) return i; if(T-> polje[i].brat== n) return ParentT(i, T); } } void CreateT(int x, int n, drvo *T){ if(T-> polje[n].dijete== -1) T-> polje[n].dijete= x; else if(T-> polje[T-> polje[n].dijete].brat== -1) T-> polje[T-> polje[n].dijete].brat= x; else{ n= T-> polje[n].dijete; while(T-> polje[n].brat!= -1) n= T-> polje[n].brat; T-> polje[n].brat= x; } T-> polje[x].label= T-> polje[n].label+1; T-> polje[x].dijete= -1; T-> polje[x].brat= -1; } drvo *DeleteT(int n, drvo *T){ if(n== RootT(T)){ T= InitT(-1, T); return T; } else{ if(T-> polje[n].dijete!= -1) DeleteT(T-> polje[n].dijete, T); if(T-> polje[n].brat!= -1) DeleteT(T-> polje[n].brat, T); T-> polje[n].dijete= -1; T-> polje[n].brat= -1; T-> polje[n].label= ' '; if(T-> polje[ParentT(n, T)].brat!= -1) T-> polje[ParentT(n,T)].dijete= T->polje[n].brat; else T-> polje[ParentT(n, T)].dijete= -1; } }