Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    décembre 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2002
    Messages : 45
    Points : 13
    Points
    13

    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 chevronné

    Homme Profil pro Thierry
    Ingénieur développement logiciels
    Inscrit en
    avril 2002
    Messages
    122
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry
    Localisation : France

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

    Informations forums :
    Inscription : avril 2002
    Messages : 122
    Points : 607
    Points
    607

    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 :
    1
    2
    3
    4
    5
    6
    7
    R
    |->A
    |  |->C
    |  |->D
    |->B
       |->E
       |->F

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    décembre 2002
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : décembre 2002
    Messages : 45
    Points : 13
    Points
    13

    Par défaut

    Merci ! j'pense que je vais opter pour cette solution.
    Ciao

  4. #4
    Invité de passage
    Inscrit en
    décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 5
    Points : 3
    Points
    3

    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 Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 519
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 519
    Points : 10 107
    Points
    10 107

    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 :
    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...
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  6. #6
    Invité de passage
    Inscrit en
    décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 5
    Points : 3
    Points
    3

    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 confirmé
    Homme Profil pro Amine K.
    Inscrit en
    octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Nom : Homme Amine K.
    Localisation : France

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

    Informations forums :
    Inscription : octobre 2007
    Messages : 487
    Points : 259
    Points
    259

    Par défaut

    Code :
    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 Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 519
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 519
    Points : 10 107
    Points
    10 107

    Par défaut

    Citation Envoyé par dot-_-net Voir le message
    Code :
    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 *"...
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •