/ Published in: C++
Općenito stablo - prvo dijete sljedeći brat.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
struct element{ char sadrzaj; int p_dijete, s_brat; }; struct tr{ element broj[10000]; int prvi; }; tr *InitT(int x, tr *T){ T = new tr; for(int i=0; i<10000; i++){ T->broj[i].sadrzaj = '0'; T->broj[i].p_dijete = -1; T->broj[i].s_brat = -1; } T->broj[x].sadrzaj = 'A'; T->prvi = x; return T; } int RootT(tr *T){ return T->prvi; } int ParentT(int n, tr *T){ if(RootT(T) == n) return -1; for(int i=0; i<10000; i++){ if(T->broj[i].p_dijete == n) return i; } } int FirstChildT(int n, tr *T){ return T->broj[n].p_dijete; } int NextSiblingT(int n, tr *T){ return T->broj[n].s_brat; } char LabelT(int n, tr *T){ return T->broj[n].sadrzaj; } void ChangeLabelT(char x, int n, tr *T){ T->broj[n].sadrzaj = x; } void CreateT(int x, int n, tr *T){ if(LabelT(x, T) != '0'){ cout <<"Vrijednost vec postoji u stablu!"<<endl; return; } if(LabelT(n, T) == '0'){ cout << "Cvor ne postoji u stablu!"<<endl; return; } if(FirstChildT(n, T) == -1) T->broj[n].p_dijete = x; else if(NextSiblingT(FirstChildT(n, T), T) == -1) T->broj[FirstChildT(n, T)].s_brat = x; else{ n = FirstChildT(n, T); while(NextSiblingT(n, T) != -1) n = NextSiblingT(n, T); T->broj[n].s_brat = x; } T->broj[x].p_dijete = -1; T->broj[x].s_brat = -1; T->broj[x].sadrzaj = T->broj[n].sadrzaj+1; } void DeleteT (int n, tr *T) { int pom; if (FirstChildT(n,T)!=-1) { pom = FirstChildT(n,T); DeleteT(pom,T); while (NextSiblingT(pom,T)!=-1) { pom = NextSiblingT(pom,T); DeleteT(pom,T); } } T->broj[n].sadrzaj = -1; if (n != RootT(T) && FirstChildT(ParentT(n,T), T)==n) T->broj[ParentT(n, T)].p_dijete = NextSiblingT(n,T); else if (n != RootT(T)) { pom = FirstChildT(ParentT(n,T),T); while (NextSiblingT(pom,T) != n) pom = NextSiblingT(pom,T); T->broj[pom].s_brat = NextSiblingT(n,T); } }