struct elmnt {
int vrij;
bool juzd;
};
struct binstab {
struct elmnt elmnti[10000];
};
typedef struct binstab *binstablo;
typedef int chvor;
chvor InitB(chvor ruut, binstab *binstablo){
int i;
for(i=0; i<10000;i++)
binstablo->elmnti[i].juzd=false;
binstablo->elmnti[0].vrij=ruut;
binstablo->elmnti[0].juzd=true;
return 0;
}
chvor RootB(binstab *binstablo){
if(binstablo->elmnti[0].juzd==true) return 0;
else
return -1;
}
chvor LeftChildB(chvor ind, binstab *binstablo){
if(binstablo->elmnti[(ind*2)+1].juzd==true) return (ind*2)+1;
else
return -1;
}
chvor RightChildB(chvor ind, binstab *binstablo){
if(binstablo->elmnti[(ind*2)+2].juzd==true) return (ind*2)+2;
else
return -1;
}
chvor ParentB(chvor ind, binstab *binstablo){
if(ind < 1) return -1;
if(binstablo->elmnti[int((ind-1)/2)].juzd==true) return int((ind-1)/2);
else
return -1;
}
chvor CreateLeftB(int vrij, chvor ind, binstab *binstablo){
int x=(ind*2)+1;
if(LeftChildB(ind, binstablo)==-1){
binstablo->elmnti[x].vrij=vrij;
binstablo->elmnti[x].juzd=true;
}
else{
cout<<"Vec postoji lijevo dijete."<<endl;
}
}
chvor CreateRightB(int vrij, chvor ind, binstab *binstablo){
int x=(ind*2)+2;
if(RightChildB(ind, binstablo)==-1){
binstablo->elmnti[x].vrij=vrij;
binstablo->elmnti[x].juzd=true;
}
else{
cout<<"Vec postoji desno dijete."<<endl;
}
}
int LabelB(chvor ind, binstab *binstablo){
if(binstablo->elmnti[ind].juzd==true) return binstablo->elmnti[ind].vrij;
else{
cout<<"Ovaj cvor nema vrijednost."<<endl;
}
}
void ChangeLabelB(int vrij, chvor ind, binstab *binstablo){
if(binstablo->elmnti[ind].juzd==true){
binstablo->elmnti[ind].vrij=vrij;
}
else{
cout<<"Ovaj cvor nema vrijednost."<<endl;
}
}
void DeleteB(chvor ind, binstab *binstablo){
if(binstablo->elmnti[(ind*2)+1].juzd==true){
DeleteB((ind*2)+1, binstablo);
}
if(binstablo->elmnti[(ind*2)+2].juzd==true){
DeleteB((ind*2)+2, binstablo);
}
binstablo->elmnti[ind].juzd=false;
}