Select Git revision
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