[C++] implémention d'un arbre binaire
Résolu
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
ccc - 4 mai 2009 à 19:07
A voir également:
- [C++] implémention d'un arbre binaire
- Binaire - Guide
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Editeur binaire - Télécharger - Édition & Programmation
- Pour être traitée par un ordinateur, l'information est codée avec un codage binaire (0 ou 1). elle occupe une certaine quantité d'espace mémoire mesurée en nombre de bits. voici deux façons de coder des lettres avec un codage binaire. le code 1 utilise 8 bits par lettre. le code 2 utilise moins de bits. - Forum Programmation
- Glandier arbre ✓ - Forum Loisirs / Divertissements
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
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);
}
#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);
}
mamiemando
Messages postés
33672
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
16 mai 2025
7 852
1 déc. 2008 à 00:14
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.
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++...
On peut bien compiler du c facilement avec un compilateur fait pour le c++ mais ça ne deviens pas pour autant du c++...
mamiemando
Messages postés
33672
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
16 mai 2025
7 852
1 déc. 2008 à 22:43
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
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
30 nov. 2008 à 23:17