Arbre généalogique

Fermé
Syndero - 17 juil. 2013 à 18:13
 Syndero - 18 juil. 2013 à 13:41
Bonjour,

Voila comme le titre l'indique ,j'ai un problème avec ce type de l'arbre en langage c, j'ai mis une structure de genre:
struct cellule{
struct cellule *premierFils;
int age ou char nom;
struct cellule *filsProche; // le frère de premier fils
};
typedef struct cellule *arbre;
Dans ce sens ,je ne trouve pas la bonne méthode pour parcourir cet arbre si je veux bien chercher par expemple l'adresse du père d'un fils donné.
J'ai cherché aussi sur internet et je trouve juste les définitions pas les méthodes comme on le trouve dans les cours des arbres de binaire de recherches
SVP aidez moi .
Cordialement

A voir également:

2 réponses

arthurg95 Messages postés 2421 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
17 juil. 2013 à 18:26
Bonjour,

Vu la structure, tu n'auras pas d'autre choix que de parcourir tout l'arbre en cherchant le nom du fils dans premierFils ou FilsProche... Soit dit en passant, un tableau ou une liste serait plus approprié que 1 ou 2 fils puisqu'il peut en avoir 3 par exemple ;)

Pour retrouver facilement les parents, pas d'autre choix, selon moi, que d'ajouter des attributs portant sur les parents ;)
0
voila le code:
arbre pere(arbre A,int x)
{
arbre tmp,p;
if(A==NULL)
return NULL;
if(A->pf!=NULL) //pf c'est le premier fils
{
tmp= A;
p=tmp->pf;
while((p!=NULL)&&(p->age!=x))
{
p=p->fp; //fp c'est le fils proche autrement le frère de premier fils
}
if(p!=NULL)
return tmp; // ici on retourne le père
}
//la partie de récursivité
if(A->pf!=NULL) return pere(A->pf,x); // on passe au pf suivant
if(A->fp!=NULL) return pere(A->fp,x);
}
0
arthurg95 Messages postés 2421 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
17 juil. 2013 à 19:04
Pour le parcours de l'arbre ?
0
oui ,j'explique le principe :
1) j'accède au premier fils à condition qu'il doit etre différent de NULL
2) Puis je parcoure ses frères et en meme temps j'accède leurs fils s'ils existent
et je ne sais pas si j'ai juste ou pas
0
arthurg95 Messages postés 2421 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
18 juil. 2013 à 01:39
C'est ça, mais il ne faut pas se perdre dans le parcours... Parce que le frère à aussi des fils, si tu "descend" au PremierFils pour voir ses propres fils, tu oublies les frères ;)
0
Et oui c'est ça le seul problème que j'ai rencontré,tu as des suggestions pour surmonter ce problème? j'ai cru que la partie de récursivité càd
//la partie de récursivité
if(A->fp!=NULL) return pere(A->fp,x);
résourdre ce problème
0
arthurg95 Messages postés 2421 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
18 juil. 2013 à 12:29
Le problème n'est pas le retour... J'essaye de faire un shéma...

Pere1 => Fp1, df1
fp1 => fp2, df2
df1 => fp3, df3
fp2 => fp4,df4
....

Si tu cherches le père de df4 par exemple, il faut que ton algo soit capable de faire TOUT l'arbre et ne pas en oublier... Il faut penser à remonter dans l'arbre à chaque fois... En général la première chose à laquelle on penser c'est parcourir Pere1, fp1, df1, fp2,df2, fp4, df4, ....
Et on oublie tout une lignée ;)
0