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); }
/****************************************************************************************** * 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; }