/ Published in: C++
header koristen za realizaciju opcenitog stabla
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include<iostream> using namespace std; struct elem { char oznaka; int firstchild,nextsibling; }; struct tr { elem element[1000]; int root; }; typedef struct tr tree; typedef int node; int RootT(tree *T){ return T->root; } int FirstChildT (int n, tree *T){ return T->element[n].firstchild; } int NextSiblingT (int n, tree *T) { return T->element[n].nextsibling; } int ParentT(int n, tree *T){ if(n == T->root || T->element[n].oznaka == ' ' ) return -1; for (int i=0; i<1000; i++) { if (FirstChildT(i, T)==n) return i; if (NextSiblingT(i, T)==n) return ParentT(i, T); } return -1; } char LabelT (int n, tree *T) { return T->element[n].oznaka; } int CreateT(char oznaka, int n, tree *T) { int i=0; while (LabelT(i, T)!=' ') i++; T->element[i].oznaka=oznaka; T->element[i].firstchild=-1; T->element[i].nextsibling=-1; if (T->element[n].firstchild!=-1) { n=FirstChildT(n, T); while (NextSiblingT(n, T)!=-1) n=NextSiblingT(n, T); T->element[n].nextsibling=i; } else T->element[n].firstchild=i; return i; } void ChangeLabelT(char oznaka, int n, tree *T) { T->element[n].oznaka=oznaka; } bool DeleteT (int n, tree *T) { int roditelj, brat; roditelj = ParentT(n,T); brat = T->element[roditelj].firstchild; if(T->element[n].oznaka == ' ') return false; while(T->element[n].firstchild != -1){ int dijete = T->element[n].firstchild; DeleteT(dijete,T); } if(brat == n) T->element[ParentT(n,T)].firstchild = T->element[n].nextsibling; else if(T->element[n].nextsibling != -1){ T->element[brat].nextsibling = T->element[n].nextsibling; } T->element[n].oznaka = ' '; return true; } tree *InitT(char oznaka, tree *T) { T=new tree; T->root=0; T->element[0].oznaka=oznaka; T->element[0].firstchild=-1; T->element[0].nextsibling=-1; for (int i=1; i<1000; i++) { T->element[i].oznaka=' '; T->element[i].firstchild=-1; T->element[i].nextsibling=-1; } return T; }