[C++] implémention d'un arbre binaire [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
1 novembre 2007
-
 ccc -
Bonjour tout le monde
Pourriez vous m'aidez à implémenter un arbre binaire en C++ svp.
Merci d'avance.
A bientot.

3 réponses

Messages postés
21
Date d'inscription
mardi 4 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008
15
#include<stdio.h>
#include<stdlib.h>
typedef struct noeud * tree;
struct noeud
{int val;
tree fg,fd;
};
tree cree_noeud(int val)
{
tree a;
a=(tree)malloc(sizeof(noeud));
if(!a)
{printf("pas d espace");
return(NULL);
}
if(a)
{
a->fd=NULL;
a->fg=NULL;
a->val=val;
printf("%d",a->val);
return(a);
}
}
tree ajout(tree b,tree a,tree r)
{a=r;
if(a==NULL)
{
return b;
}
else
{
if(b->val<a->val)
{
if(a->fd==NULL)
{
a->fd=b;
printf("%d",a->val);
return(r);
}
else
{
r=ajout(b,a->fd,r);
return(r);
}
}
else
{
if(a->fg==NULL)
{
a->fg=b;
printf("%d",a->val);
return r;
}
else
{
r=ajout(b,a->fg,r);
return(r);
}
}
}
}
void prefixe(tree a)
{
if(a!=NULL)
{
printf("%d ",a->val);
prefixe(a->fg);
prefixe(a->fd);
}
}

void main()
{int x,l,h;
tree r=NULL,b=NULL,k=NULL,a=NULL;free(r);
printf("donner un entier : \n" );
scanf("%d",&x);
b=cree_noeud(x);
r=ajout( b,a, r);
printf("%d",r->val);
flushall();
printf("donner un entier : \n");
scanf("%d",&x);
b=cree_noeud(x);
r=ajout( b,a, r);

prefixe(r);
}
15
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

C'est du C
Messages postés
29336
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 octobre 2020
6 946
Je signale juste que du C++ c'est jamais que du C enrichi. Alors effectivement tu peux faire des classes, des héritages, des templates (ou encore mieux, du boost) si ça t'amuse, mais en soit ça ne change pas grand chose.
Non le c++ et le c sont deux langages bien différents maintenant et ici c'est bien du C vu l'utilisation de malloc, pas d'utilisation des classes alors que ça serait plus adapté en c++, utilisation de printf ( au lieu de cout en c++ ) et inclusion de stdio.h et stdlib.h.
On peut bien compiler du c facilement avec un compilateur fait pour le c++ mais ça ne deviens pas pour autant du c++...
au contraire ça change tous
Messages postés
29336
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
19 octobre 2020
6 946
Sans vouloir te faire de peine toutes les fonctions "C" sont accessibles via des headers genre <cstdio>, <cassert>, etc... Du coup est ce que le code n'en devient plus du C ou pas moins du C++ :p

En soi, ça n'apporte rien de vouloir coder "C++" like si tu peux le faire aussi facilement en C. Ici le seul intérêt du C++ pourrait être l'utilisation de template pour faire un arbre générique mais c'est à peu près tout ce qui est à gagner. En particulier certaines fonctions genre fscanf (pour parser un fichier) sont plus pratique qu'un std::ifstream et >>. Soit tu utilises de la lib pcre, soit au final tu utilises <cstdio> et fscanf. Toute cette dissertation pour dire qu'à mon avis dans ce cas précis ça n'a pas des masses d'importance.

Ceci dit, si tu es chaud pour faire une solution C++ n'hésite pas ;-)

Bonne chance