Arbre généalogique
Syndero
-
Syndero -
Syndero -
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
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:
- Arbre généalogique
- Arbre généalogique famille michelin - Télécharger - Généalogie
- L'arbre Généalogique de la famille - Télécharger - Généalogie
- Créer arbre généalogique gratuit ✓ - Forum Loisirs / Divertissements
- Glandier arbre ✓ - Forum Photoshop
- Arbre généalogique de Nicolas Menoux - Forum Logiciels
2 réponses
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 ;)
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 ;)
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);
}
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);
}
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 ;)
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 ;)