Dessiner une arbre binaire( mode console):

Soyez le premier à donner votre avis sur cette source.

Vue 9 577 fois - Téléchargée 934 fois

Description

Bonjour;
car il est défficile d'imaginer la représentation d'une arbre binaire,
je vous présente un code en c qui dessin une arbre binaire de recherche sur le console.

Voir le Snapshot (capture) pour etre convaincus de télecharger le code :)

le modelle d'arbre binaire(rechercher , supression, ...) est inclu dans le code aussi.

Source / Exemple :


le reste du code est dans le zip: 
voila la fonction DrawTree_Horizonral

void DrawTree_Horizonral(TArbre arbre,char type, int x, int y,int level)
{

    if(arbre!=NULL)
    {
        int a=level-1;
        switch (type)
        {
            case 'r'://racine
            /*on calcule les coordonées du racine slon le profonder de l'arbre ...*/
            x=1;
            y=pow(2,Hauteur(arbre)-1);
            gotoxy(x,y);
            printf("[%d]",arbre->valeur);
            printf("%c%c",196,180);
            DrawTree_Horizonral(arbre->droit,'d',x+nb_pos(arbre->valeur)+3,y-1,Hauteur(arbre));
            DrawTree_Horizonral(arbre->gauche,'g',x+nb_pos(arbre->valeur)+3,y+1,Hauteur(arbre));
            break;

            case 'd'://droit

            while(a>=0)
            {
                a--;
                gotoxy(x,y);
                y--;
                printf("%c",179);
            }
            gotoxy(x,y);
            printf("%c",218);
            textcolor(10);
            printf("(%d)",arbre->valeur);
            textcolor(15);
            printf("%c%c",196,180);
            DrawTree_Horizonral(arbre->droit,'d',x+nb_pos(arbre->valeur)+2+2,y-1,Hauteur(arbre)-1);
            DrawTree_Horizonral(arbre->gauche,'g',x+nb_pos(arbre->valeur)+2+2,y+1,Hauteur(arbre)-1);

            break;

            case 'g'://gauche
            textcolor(15);
            while(a>=0)
            {
                a--;
                gotoxy(x,y);
                y++;
                printf("%c",179);
            }
            gotoxy(x,y);
            printf("%c",192);
            textcolor(12);
            printf("(%d)",arbre->valeur);
            textcolor(15);
            printf("%c%c",196,180);
            DrawTree_Horizonral(arbre->droit,'d',x+nb_pos(arbre->valeur)+2+2,y-1,Hauteur(arbre)-1);
            DrawTree_Horizonral(arbre->gauche,'g',x+nb_pos(arbre->valeur)+2+2,y+1,Hauteur(arbre)-1);
            break;
        }

    }else
     {

        gotoxy(x,y);
        if(type=='d')
        printf("%c%c",218,196);
        else
        printf("%c%c",192,196);;
        textcolor(14);
        printf("%c",16);
        textcolor(7);
        //printf("%c%c",196,180);
     }

}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
7
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
4 décembre 2011

Bonjour...
la fonction nb_pos renvoie le nombre de positions d'un entier.
c'est a dire si on la donne 1235 elle renvoie 4 mais pour un souci d'affichage dans le console
j'était aussi besoin de considérer la signe (-) comme une position .. donc c pour ça que j'ai fait le test de signe.. c tous.
concernant la boucle ... c équivalent à:
ret=0;
do
{
a/=10;
ret++;
}while(a!=0) ;
Messages postés
4
Date d'inscription
lundi 25 avril 2011
Statut
Membre
Dernière intervention
13 mai 2012

que fait la fonction nb_pos, et j'ai pas bien saisi le sens des instruction "for(ret=1;a./10;ret++,a/=10);" "if (b.TotalElu<0) ret++;" si tu peux m'expliquer ! Merci pour le code, c'est instructif ! Merci
Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
Et bien, dans ce cas, code en anglais et non en français :p
Messages postés
7
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
4 décembre 2011

Merci"BUNO" pour ces remarques, je vais le modifier quand j'ai le temps.
je suis pas trés bien en fraçais donc pardonnez moi pour les faults..
en plus je trouve que l'englais m'inspire beaucoup :)
Messages postés
15024
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
29 avril 2021
94
Rhooo...."Initié"....J'avais pas fait gaffe.
Je trouve cette classification un peu abusée quand même.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.