IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème [ Arbre bicolore - Red black tree ] :


Sujet :

C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut Problème [ Arbre bicolore - Red black tree ] :
    Bonjour, j'ai un travail à finir, c'est une arbre bicolore qui doit être équilibré a chaque insertion ou suppression, mon problème est dans les rotations !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void ajout(A p, A *r){ A R=*r; // P c'est le nœud déjà créé, r la racine 
        if(*r==NULL) *r=p; // si l'arbre est vide, le sommet est noire
        else {
        p->pa=*r; // comme le précédant pour les listes !
        if((*r)->cle> p->cle)  ajout(p,&(*r)->g,t);
        else ajout(p,&(*r)->d,t);
        }
    eq_racine(p); // pour l'équilibrage !
    }
    l'équilibrage se fait normalement, mais lorsque je cherche à faire la règle de beta ( règle d'arrêt qui contient les rotations ) les rotation ne marche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void eq_beta_test1(A R){
        A G=grandpere(R);
        if((R == R->pa->d) && (R->pa == G->g)){ // si
            //
            rotation_d(R->pa);
            }
        else if ((R == R->pa->g) && (R->pa == G->d)){
            rotation_g(R->pa);
        }
        printf("cle : %d\n",R->cle);
        eq_beta_test2(R);
    }
     
    void eq_beta_test2(A R){
        A G=grandpere(R);
        R->pa->color='n';
        G->color='b';
        if(R==R->pa->g) rotation_d(R);
        else rotation_g(R);
    }
    voici les fonctions de rotations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void rotation_g(A R){ A gg=NULL,dg=NULL;
    A G=grandpere(R);
    printf("\nRotation Gauche !\n");
    if(G!=NULL && G->d!=NULL) {
            gg=G;//garder la racine
            if(G->d->g!=NULL) dg=G->d->g;//garder la gauche de droite de a
            G=G->d;//a devient la droite de a
            G->g=gg;
            gg->d=dg;//la droite du gauche de a devient la gauche du droite de a
    }
    }
    //rotation_droite
    void rotation_d(A R){ A dd=NULL,dg=NULL;
    printf("\nRotation droite !\n");
    A G=grandpere(R);
    if(G!=NULL && G->g!=NULL) {
            dd=G;//garder la racine
            if(G->g->d!=NULL)dg=G->g->d;//garder la droite du gauche de a
            G=G->g;//a devien la gauche de a
            G->d=dd;//
            dd->g=dg;//la gauche du droite de a devient  la droite du gauche de a
            }
    }
    le programme est ci-joint si vous voulez vérifier le code en détail.
    MERCI !
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Arbre rouge et noir (red–black tree)
    Par javast dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/12/2011, 10h58
  2. [arbre bicolore/Red Black tree]Suppression
    Par cedrix57 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 19/10/2011, 06h51
  3. Suppression de noeud dans un red-black tree (arbre bicolore)
    Par bakero dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 13/07/2011, 15h43
  4. Insertion dans un arbre binaire Rouge-Noir (Red-Black Tree)
    Par monsieurouxx dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 25/06/2010, 18h29
  5. l'arbre de Steiner (steiner tree)
    Par svince dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 18/01/2006, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo