struct elmnt {
       int vrij;
       struct elmnt *left,*right;
};

typedef struct elmnt *chvor;
typedef struct elmnt *binstablo;

void InitB(int vrij, binstablo B){
     chvor nuevo;
     nuevo= new elmnt;
     nuevo->vrij=vrij;
     nuevo->left=NULL;
     nuevo->right=NULL;
     B=nuevo;
}

chvor RootB(binstablo B){
     if(B==NULL) cout<<"Nema korijena stabla."<<endl;
     return B;
}

chvor LeftChildB(chvor C, binstablo B){
     return C->left;
}

chvor RightChildB(chvor C, binstablo B){
     return C->right;
}

chvor ParentB(chvor C, binstablo B){
     if(C==B) return NULL;
     chvor starci;
     if(B->left!=NULL){ 
                 if(B->left==C) return B->left;
                 starci=ParentB(C,B->left);
     }
     if(B->right!=NULL){
                if(B->right==C) return B->right;
                starci=ParentB(C,B->right);
     }
     return starci;
}

void CreateLeftB(int vrij, chvor C, binstablo B){
     chvor nuevo;
     nuevo = new elmnt;
     if(LeftChildB(C, B)) cout<<"Vec postoji lijevo dijete."<<endl;
     else{
          nuevo->vrij=vrij;
          nuevo->left=NULL;
          nuevo->right= NULL;
          C->left=nuevo;
     }
}

void CreateRightB(int vrij, chvor C, binstablo B){
     chvor nuevo;
     nuevo= new elmnt;
     if(RightChildB(C, B)) cout<<"Vec postoji desno dijete."<<endl;
     else{
          nuevo->vrij=vrij;
          nuevo->left=NULL;
          nuevo->right=NULL;
          C->right=nuevo;
     }
}

int LabelB(chvor C, binstablo B){
    if(C==NULL){
                cout<<"Nepostojeci cvor."<<endl;
                return -1;
    }
    return B->vrij;
}

void ChangeLabelB(int vrij, chvor C, binstablo B){
     if(C==NULL) cout<<"Nepostojeci cvor."<<endl;
     else{
          B->vrij=vrij;
     }
}

void DeleteB(chvor C, binstablo B){
     if (C->left!=NULL) DeleteB(C->left, B);
     if (C->right!=NULL) DeleteB(C->right, B);
     delete C;
}