#include<iostream.h>

struct element {
       int vrijednost;
       struct elem *L,*D;
};
typedef struct elem *cv;
typedef struct elem *bs;
void InitI(int v, bs I){
     cv novi;
     novi= new elem;
     novi->v=v;
     novi->L=NULL;
     novi->D=NULL;
     I=novi;
};//InitI
cv LeftChildI(cv C, bs I){ 
                 return C->L;
};//LeftChild
cv RightChildI(cv C, bs I){
                  return C->D;
};//RightChild
cv ParentI(cv C, bs I){
     if(C==I) return NULL;
     cv r;
     if(I->L!=NULL){
                 if(I->L==C) return I->L;
                 r=ParentB(C,I->L);
     }
     if(I->D!=NULL){
                if(I->D==C) return I->D;
                r=ParentI(C,I->D);
    }
     return r;
};//ParentI
void CreateLeftI(int v, cv C, bs I){
     cv novi;
     novi = new elem;
     if(LeftChildI(C, I)) cout<<"Cvor ima lijevo dijete."<<endl;
     else{
          novi->v=v;
          novi->L=NULL;
          novi->D= NULL;
         C->L=novi;
     }
};//CreateLeftI
void CreateRightI(int v, cv C, bs I){
     cv novi;
     novi= new elem;
     if(RightChildI(C, I)) cout<<"Cvor ima desno dijete."<<endl;
     else{
          novi->v=v;
          novi->L=NULL;
          novi->D=NULL;
          C->D=novi;
     }
};//CreateRightI
int LabelI(cv C, bs I){
    if(C==NULL){
                cout<<"Cvor ne postoji."<<endl;
                return -1;
    }
    return I->v;
};//LabelI
void ChangeLabelI(int v, cv C, bs I){
     if(C==NULL) cout<<"Cvor ne postoji."<<endl;
     else{
          I->v=v;
     }
};//ChangeLabelI
void DeleteI(cv C, bs I){
     if (C->L != NULL) DeleteI(C->L, I);
     if (C->D != NULL) DeleteI(C->D, I);
     delete C;
};//DeleteI
//takoder je slican ostalima, jer se nema tu puno sto za mijenjati, jedino sto koristim drugacije oznake i drugaciji redoslijed