Arbre généalogique

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

  • Votes
  • Date
  • Date décroissante
  1. 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 ;)
    1. 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);
      }
      1. Pour le parcours de l'arbre ?
      2. 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
      3. 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 ;)
      4. 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
      5. 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 ;)