Beispiel #1
0
Datei: AVL.c Projekt: Arch23/AVL
Node* OPfunction(Node *N){
   switch(verifBal(N)){
      case(NO_ACTION):{
         break;
      }
      case(SIMPLE_LEFT):{
         printf("\nSIMPLE LEFT");
         N = rotL(N);
         break;
      }
      case(SIMPLE_RIGHT):{
         printf("\nSIMPLE RIGHT");
         N = rotR(N);
         break;
      }
      case(DOUBLE_LR):{
         printf("\nDOUBLE LR");
         N = rotLR(N);
         break;
      }
      case(DOUBLE_RL):{
         printf("\nDOUBLE RL");
         N = rotRL(N);
         break;
      }
   }
   updateBal(N);
   return(N);
}
Beispiel #2
0
/******************************************************************************************
* AVLbalance()
*
* Arguments:    h:  ponteiro para um no da arvore
*
* Returns: link retorna um no da arvore
* Description:  balanceia a arvore AVL
*****************************************************************************************/
link AVLbalance(link h){
    int balanceFactor;
    if (h==NULL) 
        return h;
    balanceFactor = Balance(h);
    if(balanceFactor > 1){
        if (Balance(h->l) >= 0) 
            h=rotR(h);
        else                 
            h=rotLR(h);
    }
    else if(balanceFactor < -1){
        if (Balance(h->r) <= 0) 
            h = rotL(h);
        else                 
            h = rotRL(h);
    } else{
        int peso_left = peso(h->l); 
        int peso_right = peso(h->r);
        h->peso = peso_left > peso_right ?  peso_left + 1 : peso_right + 1;
    }
    return h; 
}