Return to Snippet

Revision: 38500
at January 4, 2011 08:11 by nihorvati1


Initial Code
struct tcvor {
       int oznaka;
       bool koristen;
};
struct tstablo {
       struct tcvor polje[10000];
};

      
int ParentB (int i, tstablo *stablo){
    if (i == 1) return -1;  
    if (stablo->polje[i].koristen){
       if (stablo->polje[i*2].koristen || stablo->polje[i*2+1].koristen) 
          return i/2;
    }
};

int LeftChildB (int i, tstablo *stablo){                
        if (stablo->polje[i*2].koristen) return i*2;  
        if (!stablo->polje[i*2].koristen) return -1;
};

int RightChildB (int i, tstablo *stablo){
        if (stablo->polje[i*2+1].koristen) return i*2+1;
        if (!stablo->polje[i*2+1].koristen)return -1;
};   
                 
int LabelB (int i, tstablo *stablo){
        if (stablo->polje[i].koristen && stablo->polje[i].oznaka >= 0) 
           return stablo->polje[i].oznaka;
        if (!stablo->polje[i].koristen)
           return 0;                   
};
            
void ChangeLabelB (int oznaka, int i, tstablo *stablo){
        if (oznaka%2 == 0){           
           if (stablo->polje[i*2].koristen)
            stablo->polje[i*2].oznaka = oznaka; 
        }
        else {
             if (stablo->polje[i*2+1].koristen)
                stablo->polje[i*2+1].oznaka = oznaka;
        }
};

int RootB (tstablo *stablo){
       if (stablo->polje[1]) return 1;
       else return -1;
};

void CreateLeftB (int oznaka, int i, tstablo *stablo){
     if (LeftChildB (i,stablo) == -1 || (!stablo->polje[i*2].koristen)){
        stablo->polje[i*2].oznaka = oznaka; 
        stablo->polje[i*2].koristen = true;                 
};

void CreateRightB (int oznaka, int i, tstablo *stablo){
     if (RightChildB (i,stablo) == -1 || (!stablo->polje[i*2+1].koristen)){
        stablo->polje[i*2+1].oznaka = oznaka; 
        stablo->polje[i*2+1].koristen = true;
     }
};

void DeleteB (int i, tstablo *stablo){
         if (stablo->polje[i*2].koristen){
            DeleteB (polje[i*2], stablo); 
            stablo->polje[i*2].koristen = false; 
         }
         if (stablo->polje[i*2+1].koristen){
           DeleteB (polje[i*2+1], stablo); 
           stablo->polje[i*2+1].koristen = false;                             
         }
         if (stablo->polje[1].koristen){
            DeleteB(polje[1],stablo);
            stablo->polje[1].koristen = false;
         }
};
            
void InitB (int korijen, tstablo *stablo){
        do{
           DeleteB (polje[i*2], stablo);
           DeleteB (polje[i*2+1], stablo);
        }while (i != 1);        
        stablo->polje[1].oznaka = korijen; 
        stablo->polje[1].koristen = true;
};

Initial URL

                                

Initial Description

                                

Initial Title
implementacija binarnog stabla pomoću polja

Initial Tags

                                

Initial Language
C++