/ Published in: C++
An C++ header using templates.
Array implementation of binary tree.
Array implementation of binary tree.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#ifndef __POLJE__ #define __POLJE__ #include <iostream> #define N_ELEMENTS 10000 namespace stablo_polje{ template<typename labeltype> struct element{ element(){ used=false; } labeltype label; bool used; }; template<typename labeltype> struct bt { element <labeltype>elements[N_ELEMENTS]; }; template<typename labeltype> int ParentB(int n,bt<labeltype>&T) { if(n<2||!T.elements[n].used) return -1; if(!T.elements[n/2].used) return -1; else return(n/2); } template<typename labeltype> int LeftChildB(int n, bt<labeltype>&T) { if(n<1||n>=N_ELEMENTS/2||(!T.elements[n].used)) return -1; if(!T.elements[n*2].used) return -1; else return n*2; } template<typename labeltype> int RightChildB(int n, bt<labeltype>&T) { if(n<1||n>=N_ELEMENTS/2||(!T.elements[n].used)) return -1; if(!T.elements[n*2+1].used) return -1; else return n*2+1; } template<typename labeltype> labeltype LabelB(int n, bt<labeltype>&T) { if(n<1||n>=N_ELEMENTS) return -1; if(!T.elements[n].used) return -1; else return T.elements[n].label; } template<typename labeltype> void ChangeLabelB(labeltype x, int n, bt<labeltype>&T) { if(n<1||n>=N_ELEMENTS) return; if(T.elements[n].used) T.elements[n].label=x; } template<typename labeltype> int RootB(bt<labeltype>&T) { if(!T.elements[1].used) return -1; else return 1; } template<typename labeltype> bool CreateLeftB(labeltype x, int n, bt<labeltype>&T) { if(n<1||n>=N_ELEMENTS) return false; if(T.elements[n*2].used) return false; T.elements[n*2].used=true; T.elements[n*2].label=x; return true; } template<typename labeltype> bool CreateRightB(labeltype x, int n, bt<labeltype>&T) { if(n<1||n>=N_ELEMENTS) return false; if(T.elements[n*2+1].used) return false; T.elements[n*2+1].used=true; T.elements[n*2+1].label=x; return true; } template<typename labeltype> void InitB(labeltype x, bt<labeltype>&T) { int i; T.elements[1].used=true; T.elements[1].label=x; for(i=2; i<N_ELEMENTS; i++) T.elements[i].used=false; } template<typename labeltype> void DeleteB(int n, bt<labeltype>&T) { if(LeftChildB(n,T)>0) DeleteB(LeftChildB(n,T),T); if(RightChildB(n,T)>0) DeleteB(RightChildB(n,T),T); T.elements[n].used=false; } }; #endif