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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    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
    Par défaut Arbre binaire en C
    Bonjour !
    je veux créer un programme pour insérer dans un arbre binaire puis afficher l'arbre
    voila ce que j'ai fais jusqu'à maintenant, le problème c'est que l'arbre ne change pas quand j'insère un élément ça reste toujours à NULL
    aidez moi à réglr le problème s'il vous plait ! MERCI
    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
    #include<stdio.h>
     
    #include <stdlib.h>
     
    #include <conio.h>
     
     
    /*type liste*/
    typedef struct noeud * ab;
    struct noeud
    {
       	int val;
    	ab g;
    	ab d;
    };
    /*creation dun neoud*/
    ab creat(int val,ab ls, ab rs)
    {
    ab e = new(noeud);	
     
    	e->val = val;
    	e->g = ls;
    	e->d = rs;
     
    	return e;
    }
    /*ajout dun element dans un ab*/
    void insert(int val,ab r)
    {
        if( r == NULL )
        {
            r=creat(val,NULL,NULL);
     
        }
        else if(r->g==NULL)
        {
            insert(val,r->g);
        }
         else if(r->d==NULL)
        {
            insert(val,r->d);
        }
    }
     
    /*affichage dun ab*/         
    void affichage(ab r)
    {if (r!=NULL){
        printf("%d",r->val);
        affichage(r->g);
        affichage(r->d);}
     
         }
    /*programme principal*/
     
    main ()
    {int choix,cho,x;
    noeud* a=NULL;
      do {
              /*faire le choix*/
        printf("\n");
          printf("1)- creation d'un arbre binaire.");
          printf("\n");
          printf("2)- affichage d'un arbre binaire.");
          printf("\n");
          printf("\n");
          printf("ENTRER VOTRE CHOIX !!:  ");
          scanf("%d",&choix);
          printf("\n");
          switch(choix)
          {
           case 1: {
                cho=1;
    while(cho!=0){
    printf("Entrer la valeur pour l'inserer dans l'arbre:\n");
    scanf("%d",&x);
    insert(x,a);
    printf("Voulez vous ajoutez un element?  (1 / 0)\n");
    scanf("%d",&cho);
    }
    printf("\n");
     
                  break;
                      }
     
     case 2: {
          printf("**AFFICHAGE DE LA LISTE**\n");
    affichage(a);
     break;
     
              }
     
    		  }
    		  }
          while (choix!=0);
     
          getch();
     
         }

  2. #2
    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 : 52
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Salam,

    Alors il y a plusieurs choses :

    1. pourquoi "ça reste NULL" ?

    A cause de void insert(int val, ab r)
    Les paramètres sont passés par copie, donc dans ta fonction tu manipules une copie de r. Pour que ça fonctionne mieux passe un pointer sur ab :
    void insert(int val, ab* r)
    ou renvoie l'arbre modifié
    ab insert(int val, ab r).

    Tu vois comment faire ou désires-tu plus d'explications ?

    2. ta fonction insert est étrange, tu ne fais rien si ni la racine, ni le fils gauche ni le fils droit sont NULL ?

  3. #3
    Membre très actif
    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
    Par défaut
    voila j'ai modifié la fonction insert mais ça marche toujours 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
    ab insert(int val,ab r)
    {
        if( r == NULL )
        {
            r= creat(val,NULL,NULL);
     
        }
        else if(r->g==NULL)
        {
            r->g=creat(val,NULL,NULL);
        }
         else if(r->d==NULL)
        {
            r->d=creat(val,NULL,NULL);
        }
        else return insert(val,r->g);
        return r;
    }

  4. #4
    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 : 52
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    voila j'ai modifié la fonction insert mais ça marche toujours 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
    ab insert(int val,ab r)
    {
        if( r == NULL )
        {
            r= creat(val,NULL,NULL);
        
        }
        else if(r->g==NULL)
        {
            r->g=creat(val,NULL,NULL);
        }
         else if(r->d==NULL)
        {
            r->d=creat(val,NULL,NULL);
        }
        else return insert(val,r->g);
        return r;
    }
    En gras la partie suspecte : si racine, fils gauche et fils droit ne sont pas null tu renvoies le résultat de l'insertion dans le fils gauche ?
    Ce que tu veux faire est :
    si fils gauche est vide on insère à gauche
    sinon si fils droit est vide on insère à droite
    sinon on insère la valeur dans le fils gauche

    Tu vas construire un peigne avec ce genre d'insertion (arbre après insertion de 1,2,3,4,5,6,7,8,9).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            1
           / \
          2   3
         / \
        4   5
       / \
      6   7
     / \
    8   9
    Bon c'est toujours un peu étrange ... tu veux implémenter quoi comme arbre binaire ?

  5. #5
    Membre très actif
    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
    Par défaut
    je veux juste insérer une valeur dans un arbre binaire

  6. #6
    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 : 52
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par mohsenuss91 Voir le message
    je veux juste insérer une valeur dans un arbre binaire
    Si tu prends le cas hypergénéral : j'ai un arbre binaire je veux y insérer une valeur alors il faut lui donner l'endroit où tu veux insérer cette valeur.
    Si tu utilises un arbre binaire spécialisé comme un arbre binaire de recherche, ou un arbre à hauteur contrainte (AVL par exemple) ou encore une structure spécialisée comme un tas, alors tu as des algorithmes précis pour la primitive d'insertion (car en général c'est la valeur qui décide du lieu d'insertion).
    Est-ce une application de ton cours ? Veux-tu implémenter un abr ?

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