Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, et autres ressources pour la rubrique C.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2005, 22h12   #1
wincher
Nouveau Membre du Club
 
Étudiant
Inscription : mars 2005
Messages : 24
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2005
Messages : 24
Points : 33
Points : 33
Envoyer un message via MSN à wincher
Par défaut Arbres binaires

je pense qu'une partie consacrée aux arbres serait la bienvenue !!
- comment créer un arbre binaire ?
- quelles sont les fonctions de bases pour manipuler des arbres binaires ?

j'ai moi même besoin d'aide concernant les arbres en C notamment à cause des pointeurs et j'ai du mal à m'en sortir !

réponses aux 2 questions :

+ Un abre binaire est une suite de pointeurs, chaque pointeurs pointe une structure dans laquelle on peut mettre une valeur (int ou char par exemple) ainsi que 2 champs pointant les structures suivantes (appelées fils gauche et fils droit). En clair : un arbre généalogique est un arbre binaire à l'envers.

Code :
1
2
3
4
5
6
7
struct elem{
	char lettre;
	struct elem* fg;
	struct elem* fd;
} t_noeud;
typedef struct elem noeud;
typedef struct elem *arbre;
+ Voila les fonctions de base :

Code :
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
boolean estvide(arbre a)
	{return a==NULL;}
 
/*** A noter qu'en C le type booleen n'est pas defini il faut donc le definir auparavent comme ceci par exemple : 
#define FALSE 0
#define TRUE  1
typedef unsigned char boolean; 
***/
 
arbre gauche(arbre a)
	{return a->fg;}
 
arbre droit(arbre a)
	{return a->fd;}
 
char valeur(arbre a)
	{return a->lettre;}
 
arbre cons(char c, arbre filsg, arbre filsd)
	{
	arbre p;
	p=(arbre)malloc(sizeof(noeud));
	p->lettre=c;
	p->fg=filsg;
	p->fd=filsd;
	return p;
	}
 
/*** Cette fonction sert a construire un arbre exemple : cons(T,cons(A,NULL,NULL),cons(W,NULL,NULL));
ici T pointe vers A vers la gauche et W vers à droite, A et W pointant vers NULL pour signaler la fin de l'arbre.
***/
wincher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2005, 10h02   #2
PRomu@ld
Responsable Algorithmes
 
Avatar de PRomu@ld
 
Homme Romuald Perrot
Attaché Temporaire d'Enseignement et de Recherche (ATER)
Inscription : avril 2005
Messages : 4 146
Détails du profil
Informations personnelles :
Nom : Homme Romuald Perrot
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Attaché Temporaire d'Enseignement et de Recherche (ATER)
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 4 146
Points : 6 166
Points : 6 166
Personnellement, je ne pense pas que celà devrait faire partie de la fac, ce n'est pas un problème du langage, tout ceci devrai être dans la partie source.
PRomu@ld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 16h25   #3
gl
Rédacteur/Modérateur
 
Homme
Inscription : juin 2002
Messages : 2 034
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France, Hauts de Seine (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 2 034
Points : 3 831
Points : 3 831
Citation:
Envoyé par PRomu@ld
Personnellement, je ne pense pas que celà devrait faire partie de la fac, ce n'est pas un problème du langage, tout ceci devrai être dans la partie source.

Entierement d'accord avec toi. J'ai d'ailleur modifier le TAG de la question
gl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 12h50   #4
millie
Rédacteur/Modérateur
 
Avatar de millie
 
Inscription : juin 2006
Messages : 6 935
Détails du profil
Informations personnelles :
Localisation : Luxembourg

Informations forums :
Inscription : juin 2006
Messages : 6 935
Points : 9 062
Points : 9 062
Citation:
Envoyé par wincher
Code :
1
2
boolean estvide(arbre a)
	{return a==NULL;}

Je trouve que ce genre de declaration (desole, je suis sur qwerty) est a eviter, sans connaitre l'implementation, on pourrait croire que l'arbre a est mis entierement sur la pile (alors que ce n'est qu'un pointeur).


Citation:
p=(arbre)malloc(sizeof(noeud));
Le cast est inutile.

Tu n'as definis aucun destructeur... Je trouves qu'il manque des operations tel que : estFeuille.

Une operation de parcours serait egalement utile, car ici, sans connaitre l'implementation, on serait oblige d'effectuer des appels recursifs (a eviter en C, il peut vite y avoir un debordement de pile).
__________________
Je ne répondrai à aucune question technique en privé
millie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 13h32   #5
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
Pour un arbre à chaînage simple, de toute façon, il faudra forcément une pile (qu'elle soit sur la pile du programe (récursif pur) ou sur le tas("itératif avec pile")) pour faire un parcours...
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2007, 11h39   #6
disturbedID
Membre du Club
 
Inscription : octobre 2005
Messages : 90
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Algérie

Informations forums :
Inscription : octobre 2005
Messages : 90
Points : 54
Points : 54
Envoyer un message via MSN à disturbedID
Citation:
Envoyé par Médinoc
Pour un arbre à chaînage simple, de toute façon, il faudra forcément une pile (qu'elle soit sur la pile du programe (récursif pur) ou sur le tas("itératif avec pile")) pour faire un parcours...
Pour quel type de parcours?
Ca ne me semble pas impossible de parcourir un arbre sans utilisé de pile, mais juste avec 1 ou 2 variable temporaires.
disturbedID est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2007, 11h56   #7
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
Pour un parcours en profondeur : Avec un chaînage simple, une pile est indispensable pour remonter.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 02h13   #8
disturbedID
Membre du Club
 
Inscription : octobre 2005
Messages : 90
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Algérie

Informations forums :
Inscription : octobre 2005
Messages : 90
Points : 54
Points : 54
Envoyer un message via MSN à disturbedID
Citation:
Envoyé par Médinoc
Pour un parcours en profondeur : Avec un chaînage simple, une pile est indispensable pour remonter.
nono, si tu parle juste de parcourir un arbre bianaire, j'essayerai de donner un pseudo code si t'es pas convaincu.
disturbedID est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 09h11   #9
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
Donne donc.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 20h40   #10
disturbedID
Membre du Club
 
Inscription : octobre 2005
Messages : 90
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Algérie

Informations forums :
Inscription : octobre 2005
Messages : 90
Points : 54
Points : 54
Envoyer un message via MSN à disturbedID
Citation:
Envoyé par Médinoc
Pour un parcours en profondeur : Avec un chainage simple, une pile est indispensable pour remonter.
Je viens de comprendre notre différant, je suppose que dans ton arbre, tu n'as pas de champs père ? Si c'est le cas je m'excuse de pas avoir prévenu plus tôt et effectivement la pile et obligatoire.
disturbedID est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 22h26   #11
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
En effet, c'est ce que je voulais dire par "avec un chaînage simple".
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 15h45   #12
Franck.H
Rédacteur
 
Avatar de Franck.H
 
Homme Franck HECHT
Inscription : janvier 2004
Messages : 5 694
Détails du profil
Informations personnelles :
Nom : Homme Franck HECHT
Âge : 35
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : janvier 2004
Messages : 5 694
Points : 9 208
Points : 9 208
Envoyer un message via MSN à Franck.H
Ouch Il est vieux ce post dis donc Ca me semble un peu légé pour ajouter ca dans les sources, pas de structuration de la source etc...C'est un peu donné à la va-vite.

Le code lui même n'est pas au top, aucun test sur les arguments ni même sur les allocations de mémoire etc... vraiment aucun sécurité

Dommage
__________________
Mon Site
Groupe social des amateurs du langage C
Ma bibliothèque de gestion de chaînes de caractères : CStr


"L'imagination est plus importante que le savoir" A. Einstein
Franck.H est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h38.


 
 
 
 
Partenaires

Hébergement Web