/ Published in: C++
Header file bstablo_polje.h - odn. implementacija binarnog stabla pomoću polja
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
struct element{ labeltype oznaka; int zapisan; }; struct tstablo{ struct element polje[10000]; }; typedef struct tstablo *tree; typedef int node; node ParentB(node n,tree stablo){ if(n==1) return -1; else return ((int)n/2); } node LeftChildB(node n,tree stablo){ if (stablo->polje[2*n].zapisan) return 2*n; else return -1; } node RightChildB(node n,tree stablo){ if (stablo->polje[2*n+1].zapisan) return(2*n+1); else return -1; } labeltype LabelB(node n,tree stablo){ return(stablo->polje[n].oznaka); } void ChangeLabelB(labeltype x, node n,tree stablo){ if (stablo->polje[n].zapisan) stablo->polje[n].oznaka = x; else return; } } node RootB(tree stablo){ return 1; } void CreateLeftB(labeltype x,node n,tree stablo){ if (stablo->polje[2*n].zapisan) return; else{ stablo->polje[2*n].zapisan = -1; stablo->polje[2*n].oznaka = x; } } void CreateRightB(labeltype x,node n,tree stablo){ if (stablo->polje[2*n+1].zapisan) return; else{ stablo->polje[2*n+1].zapisan = -1; stablo->polje[2*n+1].oznaka = x; } } void DeleteB(node n,tree stablo){ node i; stack S; if(!stablo->polje[n].zapisan) return; else{ MakeNullS(&S); if (stablo->polje[2*n].zapisan) PushS(2*n,&S); if (stablo->polje[2*n+1].zapisan) PushS(2*n+1,&S); stablo->polje[n].zapisan=0; while(!IsEmptyS(&S)){ i=TopS(&S); PopS(&S); if (stablo->polje[2*i].zapisan) PushS(2*i,&S); if (stablo->polje[2*i+1].zapisan) PushS(2*i+1,&S); stablo->polje[i].zapisan=0; } } void InitB(tree stablo, node x){ for (int i=0;i<=9999;i++) stablo->polje[i].zapisan=-1; stablo->polje[1].oznaka=x; stablo->polje[1].zapisan=-1; }