Bonjour a tous ,
Je vous explose mon probleme en esperant que quelquun puisse y repondre merci davance.
Voila :
Je dois charger un arbre (fils/frere) a partir dun fichier texte , la representation de ce fichier est :
-Code composé : 5 caracteres (sa sera un entier)
-Code composant : 5 caracteres (un entier aussi)
-Quantite : 5 caracteres aussi (un entier aussi) (pas tres utile pour le probleme que jexpose)
En bref , le code composé represente le pere du code composant donc je vais devoir placer le code composant en fonction du fait que je trouve le code composant ou pas :
2 Cas apparaissent !
Le premier : Je ne trouve pas le code composé (le pere) donc je cree le pere je le met comme frere a la racine et je cree le fils en le raccordant au pere
Le deuxieme : Je trouve le code composé donc je vais devoir creer le fils et lajouter au pere , mais ici commencent les ennuis
->> Je mexplique , en fait le code composé (le pere que jai cherche et que jai trouvé) peut apparaitre plusieurs fois dans larbre donc il faudra que je retrouve chaque fois le pere et que je lui ajoute le fils que jai (le code composant)
->>>>Donc mon probleme est que je narrive pas a faire de telle sorte de prendre ces cas en considerations !
Je poste le code que jai ecrit en esperant que vous pouvez maider a trouver la solution .
struct data
int code;
int quantite;
;
typedef struct data DATA;
struct arbre
struct arbre* fils;
struct arbre* frere;
DATA d;
;
typedef struct arbre ARBRE;
ARBRE* seek_compose(ARBRE* first,int code) //renvois un pointeur sur un noeud dont le code est egal a "code" sinon renvois null
ARBRE* p;
if (first)
if ((first->d).code==code) return(first);
if ((p=seek_compose(first->fils,code))) return(p);
return(seek_compose(first->frere,code));
return(NULL);
ARBRE* charg_l_procede(FILE*fp) // chargement de Procede.txt dans un ARBRE* et on revois ce pointeur la
ARBRE* test;
char s[50];int code_pere;
ARBRE* first=NULL;
ARBRE* p;ARBRE* tmp;ARBRE* tmp2;ARBRE* tmp3;
DATA D;
while(fgets(s,50,fp))
sscanf(s,"%5d%5d%5d",&(code_pere),&(D.code),&(D.quantite));
tmp=seek_compose(first,code_pere); // On recherche si le "composé existe ou pas"
if (!tmp) // ce cas est celui ou le "composé" nexiste pas
p=(ARBRE*)malloc(sizeof(ARBRE)); // on va mettre dans p le composé
(p->d).code=code_pere;
(p->d).quantite=1;
tmp2=(ARBRE*)malloc(sizeof(ARBRE)); // dans tmp2 on met le "composant"
tmp2->fils=NULL;
tmp2->frere=NULL;
(tmp2->d)=D;
p->fils=tmp2;
p->frere=first;
first=p;
else
p=(ARBRE*)malloc(sizeof(ARBRE));
p->frere=tmp->fils;
p->fils=NULL;
p->d=D;
tmp->fils=p;
return(first);
Ahhh TB merci pour ton temps et pour ta réponse surtout vu lheure !
Mais jai le regret de te dire que tu est passé a cote de mon problme , en fait si jai bien compris tu mas explique comment aller chercher le dernier frre pour pour insérer a cote de lui un nouveau fils du dit pre . ,
Je pense que ne me suis pas bien exprimé :) Donc je résume en fait je dois retrouver le pre du fils que je dois insérer mais le truc cest que le pre peut tre présent plusieurs fois et nimporte ou dans larbre donc mon problme est que je ne trouve pas comment retrouver ce pre autant de fois quil faut et y insérer le fils et en ne repassant pas par les pres que jai déj visité :)
Donc si sa reste ambigu prévenez moi .
PS: Ma soutenance de TP debute dans 4 heures et demi !