/ Published in: C++
stablo
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
struct el{ int Label,FirstChild,NextSibling; }; struct tree{ el element[1000]; int First; }; tree *InitT(int X,tree *T){ T = new tree; for(int i=0;i<1000;i++){ T->element[i].Label = 0; T->element[i].FirstChild = T->element[i].NextSibling = -1; } T->element[X].Label = X; T->First = X; return T; } int FirstChildT(int X, tree *T){ return T->element[X].FirstChild; } int NextSiblingT(int X, tree *T){ return T->element[X].NextSibling; } int ParentT(int X, tree *T){ for(int i=0;i<1000;i++){ if(T->element[i].FirstChild==X) return i; if(T->element[i].NextSibling==X) return ParentT(i,T); } } int LabelT(int X, tree *T){ return T->element[X].Label; } int ChangeLabelT(int X, int n, tree *T){ if(X<0) return -1; else T->element[n].Label=X; } int RootT(tree *T){ return 0; } void CreateT(int x, int n, tree *T){ if(T->element[n].Label==0) cout << "Ne postoji cvor " << n << " !" << endl; else{ if(T->element[n].FirstChild==-1) T->element[n].FirstChild = x; else if(T->element[T->element[n].FirstChild].NextSibling==-1) T->element[T->element[n].FirstChild].NextSibling = x; else{ n = T->element[n].FirstChild; while(T->element[n].NextSibling!=-1) n = T->element[n].NextSibling; T->element[n].NextSibling = x; } T->element[x].Label = T->element[n].Label+1; T->element[x].FirstChild = T->element[x].NextSibling = -1; } } int DeleteT(int X, tree *T){ if(X<0) return -1; else{ if(T->element[X].FirstChild>0) DeleteT(T->element[X].FirstChild, T); else{ T->element[X].Label=-1; T->First--; } } }