[C++] implémention d'un arbre binaire

Résolu/Fermé
mina15 Messages postés 8 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 1 novembre 2007 - 23 janv. 2007 à 23:20
 ccc - 4 mai 2009 à 19:07
Bonjour tout le monde
Pourriez vous m'aidez à implémenter un arbre binaire en C++ svp.
Merci d'avance.
A bientot.

3 réponses

loulou2008 Messages postés 21 Date d'inscription mardi 4 décembre 2007 Statut Membre Dernière intervention 11 novembre 2008 15
21 déc. 2007 à 23:48
#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
C'est du C
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
1 déc. 2008 à 00:14
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.
1
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++...
0
au contraire ça change tous
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
1 déc. 2008 à 22:43
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
0