Arbre généalogique

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

2 réponses

  1. arthurg95 Messages postés 2440 Date d'inscription   Statut Membre Dernière intervention   343
     
    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
  2. Syndero
     
    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
    1. arthurg95 Messages postés 2440 Date d'inscription   Statut Membre Dernière intervention   343
       
      Pour le parcours de l'arbre ?
      0
    2. Syndero
       
      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
    3. arthurg95 Messages postés 2440 Date d'inscription   Statut Membre Dernière intervention   343
       
      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
    4. Syndero
       
      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
    5. arthurg95 Messages postés 2440 Date d'inscription   Statut Membre Dernière intervention   343
       
      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