binarno_stablo_pokazivac.h





0
Date Submitted Wed. Jan. 4th, 2012 8:12 PM
Revision 1 of 1
Helper Vedran
Tags strukture
Comments 0 comments
Vedran Vađunec


#include <iostream>
using namespace std;

struct drvo{
        double oznaka;
        drvo *lijevo, *desno;
};
 
typedef drvo *element;
 
element LeftChildB(drvo *cvor, drvo *stablo){
        if(cvor==NULL)
                       cout<<"Lijevo dijete ne postoji"<<endl;
                       
        else
             return cvor->lijevo;
}

element RightChildB(drvo *cvor, drvo *stablo){
        if(cvor==NULL)
                       cout<<"Desno dijete ne postoji"<<endl;
        else
             return cvor->desno;       
}

double LabelB(drvo *cvor,drvo *stablo){
       if(cvor==NULL)
                      cout<<"Uneseni cvor ne postoji"<<endl;
       else
            return cvor->oznaka;       
}

element RootB(drvo *stablo){
 if(stablo)
            return stablo;
 else
      cout<<"Stablo ne postoji"<<endl;       
}

element ParentB(drvo *cvor, drvo *stablo)
{
        if(cvor==stablo)
                         cout<<"Cvor je korijen"<<endl;
        else{
             drvo *cvor2=NULL;
             if(stablo->lijevo){
                              if(stablo->lijevo==cvor) return stablo;
                              cvor2=ParentB(cvor,stablo->lijevo);
                              }
             if(stablo->desno){
                               if(stablo->desno==cvor) return stablo;
                               cvor2=ParentB(cvor,stablo->desno);
                               }
             return cvor2;
        }
}

void  CreateLeftB(int oznaka, drvo *cvor, drvo *stablo){
 if(cvor->lijevo!=NULL)
                        cout<<"Dijete vec postoji"<<endl;
 else{
      drvo *novi=new drvo;
      novi->desno=NULL;
      novi->lijevo=NULL;
      novi->oznaka=oznaka;
      cvor->lijevo=novi;   
 }
}

void CreateRightB(int oznaka, drvo *cvor, drvo *stablo)
{
 if(cvor->desno!=NULL)
                       cout<<"Dijete vec postoji"<<endl;
 else{
      drvo *novi=new drvo;
      novi->desno=NULL;
      novi->lijevo=NULL;
      novi->oznaka=oznaka;
      cvor->desno=novi;   
 }
}

void ChangeLabelB(int oznaka, drvo *cvor, drvo *stablo){
 if(!stablo)
             cout<<"Nije moguce mijenjati"<<endl;
 else
      cvor->oznaka=oznaka;
}

void DeleteB(drvo *cvor, drvo *stablo)
{    if (cvor==stablo){
        cout<<"Ne mozete obrisati korijen"<<endl;
        return;
     }
     
     if (cvor->lijevo!=NULL)
        DeleteB (cvor->lijevo, stablo);
     
     if (cvor->desno!=NULL)
        DeleteB (cvor->desno, stablo);
       
     if (cvor!=RootB(stablo) && LeftChildB(ParentB(cvor,stablo),stablo)==cvor)
        ParentB(cvor,stablo)->lijevo=NULL;
       
     else if (cvor!=RootB(stablo))
          ParentB(cvor,stablo)->desno=NULL;
         
     delete cvor;
}

element InitB(int korijen, drvo *stablo)
{
 stablo=new drvo;
 stablo->oznaka=korijen;
 stablo->lijevo=NULL;
 stablo->desno=NULL;     
}

element NodeB(int br, drvo *stablo){
        drvo *tekuci,*tekuci2;
        tekuci=stablo;
        while(tekuci){
                      if(tekuci->oznaka==br)return tekuci;
                      else tekuci=tekuci->desno;
                      }
        tekuci2=stablo;
        while(tekuci2){
                      if(tekuci2->oznaka==br) return tekuci2;
                      else tekuci2=tekuci2->lijevo;
                      }
        cout<<"Uneseni cvor ne postoji"<<endl;
        drvo *zadnji;
        zadnji=stablo;
        while(zadnji->lijevo){
                      zadnji=zadnji->lijevo;
                      }
        return zadnji;
}

 

Vedran Vadunec

Comments

There are currently no comments for this snippet.

Voting

Votes Up


Votes Down