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 :

Arbre binaire en C


Sujet :

C

  1. #21
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    les booléens
    voila ce que j'ai fais mais ça marche pas !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    bool notdeg(ab r)
    {
         if(r==NULL) {return 1;}
         else if((r->g==NULL)et(r->d==NULL)) {return false;}
         else if((r->g=!NULL)et(r->d=!NULL)) {return true;}
         else {return notdeg(r->g)&& notdeg(r->d) ;}
         }
    Le plus simple en c est de déclarer des variables de type int, false vaut 0 et true vaut autre chose que 0, prends 1.
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int b;
     
    ....
     
    if (b) {
      code exécuté si b!=0
    } else {
      code exécuté si b==0
    }
    Cela fait longtemps que tu programmes en c ???

  2. #22
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    else if((r->g!=NULL)&&(r->d!=NULL)) {return true;}
    ...
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #23
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    merci a vous ! j'ai une autre problème
    voila la procédure pour tester l’égalité de deux arbre binaire et le programme principal mais ça 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
     
     
    #include<stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    /*type liste*/
     
    struct noeud {
      int val;
      struct noeud *g;
      struct noeud *d;
    };
    typedef struct noeud *ab;
    /*creation dun neoud*/
    ab creat(int v, ab ls, ab rs)
    {
      ab res;
     
      // malloc renvoie un pointeur sur un espace mémoire
      // dont la taille est fournie en paramètre.
      // Tu veux créer de la place pour un noeud et malloc
      // renvoie un pointeur sur cet espace.
      // C'est à priori le seul endroit où tu vas utiliser
      // struct noeud
      res = (ab) malloc(sizeof(struct noeud));
     
      if (res == NULL) {
        fprintf(stderr, "Impossible d'allouer le noeud");
        return NULL;
      }
     
      res->val = v;
      res->g = ls;
      res->d = rs;
     
      return res;
    }
     
    /*ajout dun element dans un ab*/
    // Avec cette version toutes les modifications
    // que tu vas faire sur r seront perdues au
    // retour de la fonction
    // si tu as :
    // r=NULL;
    // ajout_old(r, 1);
    // ici r sera toujours NULL
    // pour modifier la valeur de r il faut réecrire
    // la fonction avec pour paramètre un pointeur 
    // sur r, donc de type ab*
    // Comme tu fais pour scanf par exemple
    void ajout_old(ab r, int elt)
    {
      if (r == NULL) {
        r = creat(elt, NULL, NULL);
      } else if (r->g == NULL) {
        r->g = creat(elt, NULL, NULL);
      } else if (r->d == NULL) {
        r->d = creat(elt, NULL, NULL);
      } else {
        ajout_old(r->g, elt);
      }
    }
     
    // ici pr est un pointeur sur un ab
    // si le pointeur est NULL il doit y avoir une
    // erreur
    // si le pointeur pointe sur NULL = arbre vide
    // j'ai sur parenthésé pour que tu vois
    // ce qui est manipulé
    void ajout(ab* pr, int elt)
    {
      if (pr==NULL) {
        printf("Erreur.");
        exit(1);
      } else if ((*pr)==NULL)
        *pr=creat(elt,NULL,NULL);
      else if ((*pr)->g==NULL)
        (*pr)->g=creat(elt,NULL,NULL);
      else if ((*pr)->d==NULL)
        (*pr)->d=creat(elt,NULL,NULL);
      else
        // remarque que je passe l'adresse du 
        // fils gauche
        ajout( &((*pr)->g), elt);
    }
     
     
    /*tester legalite de dexu ab*/
    bool egal(ab r1, ab r2)
    {
    if((r1==NULL)&&(r2==NULL)) {return true;}
    else if (r1->val==r2->val) {return true;}
    else if ((r1==NULL)||(r2==NULL)) {return false;}
    else {return (egal(r1->g,r2->g)&&egal(r1->d,r2->d));}
         }
    /*programme principal*/
     
    main()
    {
      int choix,cho,cho1,cho2,x,x1,x2;
      ab r1=NULL,r2=NULL,a = NULL;
      do {
        /*faire le choix */
        printf("\n");
     
        printf("taper (8)- pour Tester l'egalite de deux arbres binaires.");
        printf("\n");
        printf("\n");
        printf("ENTRER VOTRE CHOIX : ");
        scanf("%d", &choix);
        printf("\n");
        /*travailler le choix */
        switch (choix) {
     
         case 8:{
               printf("**TESTER L'EGALITE DE DEUX ARBRES BINAIRES**\n");
               printf("\n");
               printf("<<Creation de R1>>\n");
                cho1 = 1;
            while (cho1 != 0) {
              printf
                  ("Entrer la valeur pour l'inserer dans l'arbre R1:\n");
              scanf("%d",&x1);
              ajout(&r1,x1);
              printf
                  ("Voulez vous ajoutez un element?  (1 / 0)\n");
              scanf("%d",&cho1);
            }
             printf("<<Creation de R2>>\n");
                  cho2 = 1;
             printf("\n");     
            while (cho2 != 0) {
              printf
                  ("Entrer la valeur pour l'inserer dans l'arbre R2:\n");
              scanf("%d", &x2);
              ajout(&r2, x2);
              printf
                  ("Voulez vous ajoutez un element?  (1 / 0)\n");
              scanf("%d", &cho2);
            }
             printf("R1 et R2 sont egaux: ");
           if (egal(r1,r2)==true){printf("V");}
           else{printf("F");}
             break;
              }  
     
        }
     
      } while (choix != 0);
     
    //  getch();
     
    }

  4. #24
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Salut,

    Avant de poster pour chaque erreur que tu vas obtenir, je te conseille de chercher toi même avant et de faire des tests en dessinant un arbre sur papier et d'exécuter ton algorithme sur cette arbre pas à pas pour que tu vois où ça coince. De plus, il est d'usage de mettre ce qui ne va pas.

    Fait le sur une feuille de papier et je suis sur que tu vas trouver ton erreur en moins de 5 minutes (en plus ça sera plus gratifiant que de simplement lire la réponse ici ).

Discussions similaires

  1. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  2. suppression d'un arbre binaire
    Par NomUtilisateurDejaPris dans le forum C
    Réponses: 11
    Dernier message: 16/02/2004, 10h05
  3. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45
  4. Arbre binaire
    Par Heaven dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2004, 19h01
  5. [LG]probleme de creation arbre binaire
    Par jsaviola dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2004, 20h57

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