/ Published in: C++
Implementacija općenitog stabla prvo dijete - sljedeći brat pomoću polja
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include<iostream> using namespace std; struct elem{ int oznaka; int prvodijete; int sljedecibrat; }; struct s{ elem polje[1000]; int korijen; }; s stablo; void InitT(int x, s&stablo){ stablo.korijen=1; stablo.polje[1].oznaka=x; stablo.polje[1].prvodijete=-1; stablo.polje[1].sljedecibrat=-1; for(int i=2;i<1000;i++){ stablo.polje[i].oznaka=-1; stablo.polje[i].prvodijete=-1; stablo.polje[i].sljedecibrat=-1; } } int FirstChildT(int n, s stablo){ return stablo.polje[n].prvodijete; } int NextSiblingT(int n, s stablo){ return stablo.polje[n].sljedecibrat; } int RootT(s stablo){ return stablo.korijen; } int LabelT(int n, s stablo){ return stablo.polje[n].oznaka; } int ParentT(int n, s stablo){ for(int i=1;i<1000;i++){ if(FirstChildT(i,stablo)==n) return i; if(NextSiblingT(i,stablo)==n) return ParentT(i,stablo); } return -1; } int CreateT(int x, int n, s&stablo){ int pom=1; while(LabelT(pom, stablo)!=-1) pom++; stablo.polje[pom].oznaka=x; stablo.polje[pom].prvodijete = -1; stablo.polje[pom].sljedecibrat = -1; if(stablo.polje[n].prvodijete!=-1){ n=FirstChildT(n, stablo); while(NextSiblingT(n, stablo)!=-1) n=NextSiblingT(n, stablo); stablo.polje[n].sljedecibrat=pom; } else stablo.polje[n].prvodijete=pom; return pom; } void ChangeLabelT(int x, int n, s&stablo) { stablo.polje[n].oznaka=x; } void DeleteT(int n, s&stablo){ if(FirstChildT(n,stablo)!=-1) DeleteT(stablo.polje[n].prvodijete,stablo); if(NextSiblingT(n,stablo)!=-1) DeleteT(stablo.polje[n].sljedecibrat,stablo); stablo.polje[n].sljedecibrat=-1; stablo.polje[n].prvodijete=-1; ChangeLabelT(-1,n,stablo); }