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 :

Affichage d'un arbre binaire avec sa structure


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    étudiant
    Inscrit en
    Février 2018
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 91
    Points : 64
    Points
    64
    Par défaut Affichage d'un arbre binaire avec sa structure
    Bonsoirs , j'ai réalisé un arbre binaire de recherche et je veux l'afficher sous cette forme
                       1
                    /     \
                   2       3
                 /   \       \
               4     5       6
             /  \     /
           7    8   9
    je me suis cassé la tête mais aucune solution j'aimerai bien que vous m’aidiez en C (précisément) et merci d'avance
    voici une partie du code
    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
    #include<stdio.h>
    #include<stdlib.h>
    #include<stdbool.h>
     
    typedef struct noeud{
    	int val;
    	struct noeud *g;
    	struct noeud *d; 
    }noeud_a;
     
    noeud_a *nouveauNoeud(int e)
    {
    	noeud_a *n = (noeud_a*)malloc(sizeof(noeud_a));
    	n->d=NULL;
    	n->g=NULL;
    	n->val=e;
    	return n;
    }
     
    noeud_a *creeArbreBinaire(int e)
    {
    	noeud_a *n=nouveauNoeud(e);
    	printf("voulez vous ajouter  un fils gauche ? (o/n) oui- > entier  || non -> -1 \n");
    	scanf("%d",&e);
    	if(e!=-1) n->g = creeArbreBinaire(e);
    	else n->g=NULL;
    	printf("voulez vous ajouter  un fils droit ? (o/n) oui- > entier  || non -> -1 \n");
    	if(e!=-1) n->d=creeArbreBinaire(e);
    	else n->d=NULL;
    	return n;
    }
     
    noeud_a *insertionArbreBiniare(noeud_a *racine,int e)
    {
    	if(racine==NULL) return  nouveauNoeud(e);
    	if(e>racine->val) racine->d=insertionArbreBiniare(racine->d,e);
    	else if(e<racine->val) racine->g=insertionArbreBiniare(racine->g,e);
    	return racine;
     
    }
     
    void afficher(noeud_a *racine)
    {
    	if(racine==NULL) return ;
    	if(racine!=NULL) printf("%d  ",racine->val);
    	if(racine->g!=NULL) afficher(racine->g);
    	if(racine->d!=NULL) afficher(racine->d);
    }
     
    int main(void)
    {
    	printf(" voici l'arbre de recherche \n");
    	noeud_a *racine=NULL;
    	racine =insertionArbreBiniare(racine,15);
    	racine =insertionArbreBiniare(racine,10);
    	racine =insertionArbreBiniare(racine,20);
    	racine =insertionArbreBiniare(racine,3);
    	racine =insertionArbreBiniare(racine,13);
    	racine =insertionArbreBiniare(racine,18);
    	racine =insertionArbreBiniare(racine,22);
     
    	afficher(racine);
     
    	return 0;
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur des cavernes
    Inscrit en
    Août 2017
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Programmeur des cavernes
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 364
    Points : 1 240
    Points
    1 240
    Par défaut
    Parcours en profondeur ?

  3. #3
    Membre du Club
    Femme Profil pro
    étudiant
    Inscrit en
    Février 2018
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : Algérie

    Informations professionnelles :
    Activité : étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2018
    Messages : 91
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Jamatronic Voir le message
    Parcours en profondeur ?
    oui comment le faire le parcours en profondeur ??

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Je l'avais fait il y a 20 ans ... je me fais vieux et je ne m'en rappelle plus comment j'ai fait

    Mais :
    • Il faut connaître la hauteur de l'arbre pour avoir une boucle qui affiche 1 niveau avec les nœuds et 1 niveau avec les liens (sauf pour les feuilles) : ceci est trivial, cela se fait avec un log base 2.
    • Il faut connaître le niveau le plus rempli pour avoir la largeur maximale (pour centrer, ton affichage c'est comme une symétrie axiale ) : dans ton cas, cela semble trivial, parce que ton arbre est bourré à gauche. C'est soit le dernier niveau (celui des feuilles) soit l'avant dernier (plus un décalage à gauche pour les feuilles). Pour le savoir il faut que le nombre de nœuds soit égal à 2 puissance(hauteur) - 1 pour un arbre binaire complet.
    • Et pour finir, il faut trier ton arbre par niveau. Et je pensais à la notion de tas (ton arbre binaire est rangé dans un tableau)


    Et lorsque tu as tout cela , c'est [presque] trivial, mais il y a une notion de x2 pour calculer la largeur parce que chaque nœud à 2 liens. Il faut calculer et centrer (il faut le voir comme une grille)
    • Le niveau 0, la racine, la largeur c'est 1
    • Le niveau 1, la largeur c'est 3
    • Le niveau 2, la largeur c'est 9
    • Le niveau 3, la largeur c'est 17

    Si je ne me trompe pas , pour un niveau X (sauf la racine), c'est X * 2*X - 1 ... mais cela va dépendre où tu mets des espaces pour aérer ton affichage

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Citation Envoyé par Jamatronic Voir le message
    Parcours en profondeur ?
    Il s'agirait plutôt de le parcourir en largeur, ici.

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

Discussions similaires

  1. 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
  2. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  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