1 pièce(s) jointe(s)
Implementation d'Arbre Binaire
Bonjour ... ,
Je veux alimenter mon arbre binaire avec les membres d'une famille comme suit : chaque noeud contient comme infos (rang et prenom)
GrandPere
Parent1 Parent2
Enfant1 Enfant2 Enf1 Enf2
J'ai trouvé des difficultés pour concevoir la manière dont on peut insérer les prenom, car je dois les inserer par rapport à leurs rang !!
Alors, ce que j'ai proposé comme solution temporaire , c'est que j'ai utilisé bien evidement une structure arbre compagnée par une fonction qui permet d'ajouter les noeud selon un ordre bien déteminé , c'est à dire, c'est moi qui a précisé cet ordre qui est comme suite :
j'ai considéré que j'ai just 3 niveau dans l'arbre, et j'ai numéroté les rang pour chaque noeud :
4
3 6
1 2 5 7
Pourquoi ce-ci ?? C'est pour que je puisse faire des testes lors de l'ajout d'un noeud comme vous pouvez le constater dans mon code .
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
/*Structure de données: Arbre binaire de recherche*/
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
/* Définition de la structure Noeud d'un arbre*/
typedef struct _Noeud{
int rang;
char prenom[30];
struct _Noeud* succ_gauche;
struct _Noeud* succ_droit;
} Noeud;
/*Définition du type TArbre, une structure de type TArbre est définie par un pointeur sur la racine de l'arbre*/
typedef Noeud* TArbre;
/* Fonction ajouterNoeud: crée un Noeud et l'ajoute dans un arbre binaire de recherche.*/
void ajouterNoeud(TArbre* arbre,char *pren,int r)
{
Noeud* nouveauNoeud;
TArbre pArbre; /* Variable utilisée pour parcourir l'arbre*/
// -------------->> Création du nouveau noeud <<----------------
nouveauNoeud=(Noeud *)malloc(sizeof(Noeud));
nouveauNoeud->rang=r;
strcpy(nouveauNoeud->prenom,pren);
nouveauNoeud->succ_gauche=NULL;
nouveauNoeud->succ_droit=NULL;
// ---------->> Ajout du nouveau noeud dans l'arbre <<-----------
pArbre=*arbre;
// ->> si c'est un nouvel arbre alors le nouveau noeud sera la racine de cet arbre
if(pArbre==NULL)
pArbre=nouveauNoeud;
else
{
while(TRUE)
{
if(r < pArbre->rang)
{
if(pArbre->succ_gauche == NULL)
{
pArbre->succ_gauche = nouveauNoeud;
break;
}
else
pArbre = pArbre->succ_gauche;
}
else
{
if(pArbre->succ_droit == NULL)
{
pArbre->succ_droit = nouveauNoeud;
break;
}
else
pArbre = pArbre->succ_droit;
}
}
}
}
void sauvgarder(FILE *f,TArbre arbre)
{
if(arbre){
fprintf(f,"prenom : %s rang : %d\n",arbre->prenom,arbre->rang);
sauvgarder(f,arbre->succ_droit);
sauvgarder(f,arbre->succ_gauche);
}
}
void ecrireFichier(TArbre arbre)
{
FILE *f=fopen("solution.txt","w");
if(!f)
printf("Erreur douverture\n");
else{
sauvgarder(f,arbre);
}
fclose(f);
}
int main()
{
TArbre *arbre;
char prenom_grandParent[30];
char prenom_Parent1[30];
char prenom_Parent2[30];
/*char prenom_grandParent[30];
char prenom_Parent1[30];
char prenom_Parent2[30];*/
printf("\n\n\t\t\t############################################\n");
printf("\t\t\t# REALISER PAR ETUDIANTE #\n");
printf("\t\t\t# SISINIYA #\n");
printf("\t\t\t############################################\n");
printf("\n\n-->>Les numero des rangs de chaque noeud de l'arbre binaire ont ete propose comme suite : \n\n");
printf("\t\n |4| \n");
printf("\t |3| |6|\n");
printf("\t |1| |2| |5| |7|\n\n");
printf("\n -->> entrer le prenom du grande pere : ");
scanf("%s",prenom_grandParent);
fflush(stdin);
ajouterNoeud(arbre,prenom_grandParent,4);
printf("\n -->> entrer le prenom des fils du grand parent : \n ");
printf("\t\t * Prenom Parent 1 : ");
scanf("%s",prenom_Parent1);
fflush(stdin);
ajouterNoeud(arbre,prenom_Parent1,3);
printf("\n\t\t * Prenom Parent 2 : ");
scanf("%s",prenom_Parent2);
fflush(stdin);
ajouterNoeud(arbre,prenom_Parent2,6);
ecrireFichier(*arbre);
printf("\n\n \t\tFIN DE MON APPLICATION \t\t Sisiniya 2009/2010\n\n");
return 0;
} |
je sais bien que ma proposition pour résoudre le problème n'est pas pratiquable, C'est pour cela vient ma demande :
Mon Code me génére une erreur d'execution , c'est que lorsqu'il arrive à l'instruction du main , là où il y a :
Code:
1 2 3 4 5
|
printf("\n -->> entrer le prenom du grande pere : ");
scanf("%s",prenom_grandParent);
fflush(stdin);
ajouterNoeud(arbre,prenom_grandParent,4); |
quand je saisi , et au lieu qu'il me passe la main de saisir les parents, il n'arrive pas à executer ajouterNoeud (Voir SVP l'image qui illustre bien l'erreur )
Merci bien pour votre aide.
Sisiniya