Skip to content
Snippets Groups Projects
Select Git revision
  • 6ecbf7fcb4294d49ca2c6ed020d0edf2e5cee2b4
  • master default protected
2 results

avl.h

Blame
  • Forked from algorithmique / cours
    Source project has a limited visibility.
    avl.h 3.98 KiB
    #ifndef AVL_H
    #define AVL_H
    
    typedef int clef;
    
    typedef struct _node {
       clef key;
       struct _node* child[2];
       int h[2];
    } node;
    
    typedef node* arbre;
    
    //----------------------------------------------------------
    // fonction qui imprime un arbre                          --
    //----------------------------------------------------------
    void avl_print(arbre tree,int N);
    //----------------------------------------------------------
    // fonction qui retourne le premier noeud déséquilibré et --
    // met à jour les hauteurs sur le chemin d'insertion      --
    //----------------------------------------------------------
    node* avl_desequilibre(arbre tree,clef key);
    //----------------------------------------------------------
    // fonction qui calcule la hauteur d'un arbre             --
    //----------------------------------------------------------
    int avl_height(arbre tree);
    //----------------------------------------------------------
    // fonction qui remet à jour les hauteurs des noeuds      --
    // après le rééquilibrage                                 --
    //----------------------------------------------------------
    void avl_heights(arbre tree);
    //----------------------------------------------------------
    // fonction qui remet à jour les hauteurs des noeuds      --
    // après le rééquilibrage                                 --
    //----------------------------------------------------------
    void avl_height_node(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une rotation gauche sur le       --
    // noeud déséquilibré                                     --
    //----------------------------------------------------------
    node* avl_rot_g(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une rotation droite sur le       --
    // noeud déséquilibré                                     --
    //----------------------------------------------------------
    node* avl_rot_d(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une double rotation gauche       --
    // droite sur le noeud déséquilibré                       --
    //----------------------------------------------------------
    node* avl_rot_gd(node* nd); 
    //----------------------------------------------------------
    // fonction qui effectue une double rotation droite       --
    // gauche sur le noeud déséquilibré                       --
    //----------------------------------------------------------
    node* avl_rot_dg(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une rotation gauche sur le       --
    // noeud déséquilibré                                     --
    //----------------------------------------------------------
    void avl_rotation_g(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une rotation droite sur le       --
    // noeud déséquilibré                                     --
    //----------------------------------------------------------
    void avl_rotation_d(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une double rotation gauche       --
    // droite sur le noeud déséquilibré                       --
    //----------------------------------------------------------
    void avl_rotation_gd(node* nd);
    //----------------------------------------------------------
    // fonction qui effectue une double rotation droite       --
    // gauche sur le noeud déséquilibré                       --
    //----------------------------------------------------------
     void avl_rotation_dg(node* nd);  
    //----------------------------------------------------------
    // fonction qui rééquilibre l'arbre                       --
    //----------------------------------------------------------
    void avl_reequilibre(node* nd);
    //----------------------------------------------------------
    // fonction qui insère une valeur dans l'arbre            --
    //----------------------------------------------------------
    void avl_insert(clef key,arbre*  tree, arbre* deseq);
    
    #endif