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 :

Afficher un arbre binaire avec sa structure


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 20
    Points
    20
    Par défaut Afficher un arbre binaire avec sa structure
    Comment faire pour faire un affichage correct d'un arbre binaire sur une console Unix ?

    ex:...........c
    ............../...\
    ...........a.......e
    ................../...\
    ................d.......f

    G essayé en recursif mais j'm'y suis cassé la tête.
    Merci a celui / ou celle qui pourra m'aider !

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    il faut que tu calcule la profondeur de ton arbre pour pouvoir déterminer la position du noeud racine (en nb d'espaces) puis ensuite, tu va devoir calculer relativement au noeud suppérieur.
    M'enfin, tout ça est loin d'être évident, meme à la main ! donc je te propose de t'orienter vers un affichage certes mois évolué mais plus faisable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    R
    |->A
    |  |->C
    |  |->D
    |->B
       |->E
       |->F

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 45
    Points : 20
    Points
    20
    Par défaut
    Merci ! j'pense que je vais opter pour cette solution.
    Ciao

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut help ; j arrvie pas a faire cette affichage
    bonjour
    j essaye en vain depuis de longues heures d avoir un affichage comprehensible pour les abres binaires mais je n arrive pas , quelqu un peut m aider ?
    merci d avance
    ps ma structure d arbre bianire est :

    typedef struct Str{
    struct Str *p; // pere de cette element
    char nom[MAX]; //
    struct Str *g; // pointeur sur le fils gauche
    struct Str *d; // pointeur sur le fils droit

    } *Arbre ;

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zeroenc Voir le message
    bonjour
    j essaye en vain depuis de longues heures d avoir un affichage comprehensible pour les abres binaires mais je n arrive pas , quelqu un peut m aider ?
    merci d avance
    ps ma structure d arbre bianire est :

    typedef struct Str{
    struct Str *p; // pere de cette element
    char nom[MAX]; //
    struct Str *g; // pointeur sur le fils gauche
    struct Str *d; // pointeur sur le fils droit

    } *Arbre ;
    Faut que ta fonction d'affichage reçoive en paramètre la profondeur à laquelle elle se trouve ce qui lui permettra d'afficher autant de tabulations qu'il est nécessaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void aff(Arbre *racine, ulong prof)
    {
        ulong i;
        for (i=0; i < prof; i++)
        {
            fputs("|___ ", stdout);
        }
     
        printf("[%s]\n", facine->nom);
        if (racine->g) aff(racine->g, prof + 1);
        if (racine->d) aff(racine->d, prof + 1);
    }
    Pas testé mais ça me semble correspondre...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut un Grand MERCI
    bonjour
    un grand merci pour ton aide , ca marche parfaitement , et dire que j ai passer pas mal de temps la dessus en essayant de le faire avec une variable globale , alalalala c debutant ( je parle de moi on est bien d accord)
    encore une fois ,merci bcq pour l aide

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Points : 294
    Points
    294
    Par défaut
    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
    #include <stdlib.h>
    #include <stdio.h>
     
    struct noeud{
      struct noeud * fils_gauche;
      struct noeud * fils_droit;
      int data; 
    };
     
    typedef noeud * arbre;
     
    void ajouter_fils_gauche(noeud * r,int x){
      r->fils_gauche = (struct noeud *)malloc(sizeof(struct noeud));
      r->fils_gauche->data = x;
    }
     
    void ajouter_fils_droit(noeud * r,int x){
      r->fils_droit = (struct noeud *)malloc(sizeof(struct noeud));
      r->fils_droit->data = x;
    }
     
    void afficher_arbre(arbre a){
    printf("voici le paire %d\n",a->data );
    printf("voici le fils droit %d\n",a->fils_droit->data );
    printf("voici le fils gauche %d\n",a->fils_gauche->data );
    }
     
    int main(){
    noeud *p;
    p=new noeud;//malloc
    p->data =1;
    ajouter_fils_gauche(p,2);
    ajouter_fils_droit(p,3);
    afficher_arbre(p);
     
     
    	return 0;
    }

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    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
    #include <stdlib.h>
    #include <stdio.h>
     
    struct noeud{
      struct noeud * fils_gauche;
      struct noeud * fils_droit;
      int data; 
    };
     
    typedef noeud * arbre;
     
    void ajouter_fils_gauche(noeud * r,int x){
      r->fils_gauche = (struct noeud *)malloc(sizeof(struct noeud));
      r->fils_gauche->data = x;
    }
     
    void ajouter_fils_droit(noeud * r,int x){
      r->fils_droit = (struct noeud *)malloc(sizeof(struct noeud));
      r->fils_droit->data = x;
    }
     
    void afficher_arbre(arbre a){
    printf("voici le paire %d\n",a->data );
    printf("voici le fils droit %d\n",a->fils_droit->data );
    printf("voici le fils gauche %d\n",a->fils_gauche->data );
    }
     
    int main(){
    noeud *p;
    p=new noeud;//malloc
    p->data =1;
    ajouter_fils_gauche(p,2);
    ajouter_fils_droit(p,3);
    afficher_arbre(p);
     
     
    	return 0;
    }
    Dommage d'avoir deux fonctions "ajouter_fils_gauche" et "ajouter_fils_droit" là où une seule suffirait. Par ailleurs ton exemple est quand-même un poil limité (un seul noeud avec seulement deux branches c'est pas vraiment ce que l'on pourrait nommer "arbre"...)...

    PS: Caster le retour de malloc() est inutile depuis que malloc est de type "void *"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/04/2011, 14h46
  2. Remplir un arbre binaire avec une table ordonnée.
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 26/11/2009, 16h20
  3. probléme avec arbre binaire
    Par lanageuse56 dans le forum C
    Réponses: 13
    Dernier message: 17/05/2007, 16h50
  4. probleme avec une "structure en arbre"
    Par kamouminator dans le forum C
    Réponses: 1
    Dernier message: 07/11/2006, 22h21
  5. Arbre binaire avec la STL ?
    Par SteelBox dans le forum SL & STL
    Réponses: 9
    Dernier message: 10/11/2004, 13h22

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