Arbre binaire en C
Sofi
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir,
Je voudrais poser une question à propos une arbre binaire en C.
Est ce qu'on peux le définir comme ça :
Et après je fais la fonction par exemple:
int estvide(typetree A)
{
if(A.SAG==NULL || A.SAD==NULL || A.etiquette==NULL)
return 0;
else
return 1;
}
il m'avertit qu'il y des fautes au niveau de 1 ligne :
C:\Users\Desktop\ARBRENOEUD\main.c|29|error: request for member 'SAD' in something not a structure or union|
Je voudrais poser une question à propos une arbre binaire en C.
Est ce qu'on peux le définir comme ça :
typedef struct noeud * tree; struct noeud { int etiquette; tree SAG; tree SAD; } typetree;
Et après je fais la fonction par exemple:
int estvide(typetree A)
{
if(A.SAG==NULL || A.SAD==NULL || A.etiquette==NULL)
return 0;
else
return 1;
}
il m'avertit qu'il y des fautes au niveau de 1 ligne :
C:\Users\Desktop\ARBRENOEUD\main.c|29|error: request for member 'SAD' in something not a structure or union|
A voir également:
- Arbre binaire en C
- Binaire - Guide
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Editeur binaire - Télécharger - Édition & Programmation
- Arbre de décision ✓ - Forum Excel
- Alphabet binaire ✓ - Forum Programmation
5 réponses
Il faut mettre directement tes pointeurs dans la structure qui s'appelle elle même :
Remarque : ta méthode estVide est bancale, etiquette ne peut pas être NULL, et un arbre est vide lorsque ses deux sous-arbres sont vides, pas seulement l'un des deux.
typedef struct noeud { int etiquette; struct noeud *SAG; struct noeud *SAD; } typetree;
Remarque : ta méthode estVide est bancale, etiquette ne peut pas être NULL, et un arbre est vide lorsque ses deux sous-arbres sont vides, pas seulement l'un des deux.
int estVide(const typetree a) { return a.SAG==NULL && a.SAD==NULL; }
En prenant la structure déjà défini lorsque je fais un appelle récursif de la fonction: comment je peux le déclarer par exemple j'ai la fonction suivante:
int taille( typetree A)
{
int nombre;
if(estvide(A))
nombre=0;
else
{
nombre=1+taille(A.SAG)+taille(A.SAD);
}
return nombre;
}
alors comment je peux faire l'appelle le sous arbre Gauche car lorsque j'ai taille(A.SAG) il m'affiche un erreur
int taille( typetree A)
{
int nombre;
if(estvide(A))
nombre=0;
else
{
nombre=1+taille(A.SAG)+taille(A.SAD);
}
return nombre;
}
alors comment je peux faire l'appelle le sous arbre Gauche car lorsque j'ai taille(A.SAG) il m'affiche un erreur
Il faut vérifier chaque sous-arbre indépendamment.
D'ailleurs ta fonction estVide a peu de sens, le simple fait que ton arbre existe implique qu'il contient au moins une valeur, il s'agit plutôt de savoir si c'est une feuille ou non...
D'ailleurs ta fonction estVide a peu de sens, le simple fait que ton arbre existe implique qu'il contient au moins une valeur, il s'agit plutôt de savoir si c'est une feuille ou non...
int taille(const typetree A) { int nombre = 1; // il faut compter A !!! if (A.SAG!=NULL) nombre+=taille(A.SAG); if (A.SAD!=NULL) nombre+=taille(A.SAD); return nombre; }La confiance n'exclut pas le contrôle
le problème c'est pas dans le code mais dans le déclaration de A.SAG par ce qu'on l'a définit comme noeud* mais dans l'appelle récursif on a besoin de taille(typetree A).
Alors le compilateur n'a pas accepté le type de variable déclaré dans taille(A.SAG).
En plus le taille dans une arbre est le nombre des noeuds
Alors le compilateur n'a pas accepté le type de variable déclaré dans taille(A.SAG).
En plus le taille dans une arbre est le nombre des noeuds
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oups... erreur d'inattention ^^
C'est avec ton typedef, il faut déclarer typetree comme pointeur puis l'utiliser comme ça !
C'est avec ton typedef, il faut déclarer typetree comme pointeur puis l'utiliser comme ça !
typedef struct noeud { int etiquette; struct noeud *SAG; struct noeud *SAD; } *typetree; int estVide(const typetree a) { return a->SAG==NULL && a->SAD==NULL; } int taille(const typetree a) { int nombre = 1; if (a->SAG!=NULL) nombre+=taille(a->SAG); if (a->SAD!=NULL) nombre+=taille(a->SAD); return nombre; }