////////////////////////////////////////////////////
typedef struct maillon
{
NOEUD * arbre;
//int info; ici jaurai simplement recopier les variables
//int nbocc; et laisser tomber le pointeur vars un arbre
struct maillon* suivant;
}MAILLON;
/////////////////////////////////////////////////////
typedef struct noeud
{
int info;
int nbocc;
struct noeud *fg;
struct noeud *fd;
}NOEUD;
/////////////////////////////////////////////////////////
MAILLON *CreerListOcc (NOEUD *arbre)
{
/* je n arrive pas a faire cette fonction ki retourne la liste
créée a partir de l arbre (je souhaiterais au moins 1 algo...)
on considere que l on a acces a un jeu de primitives complet.*/
if (arbre!=null){
MAILLON * liste;
if((liste = (MAILLON *)malloc(sizeof(MAILLON))) == null)
{ perror("malloc failed "); abort; }
/*on traite le noeud*/
if
(arbre!=null){ //cas n'arrivera
jamais deja testé avant
//mais fo mieu deux protections
qu'une ;)
liste = inserer(liste,arbre); //a la limite j'aurai fait : liste->arbre=arbre;
//pour etre plus proche de ce que tu proposait
//liste->info=arbre->info;
personnellement j'aurai fait comme ca mais ta solution peut
//etre bonne a cet endroit
//liste->nbocc=arbre->nbocc; jai pas eu le temps d réfléchir a ca
}
/*on traite le fils gauche*/
if (arbre->fg!=null)
liste->suivant = CreerListOcc(arbre->fg);
/*on traite le fils droit*/
if (arbre->fd!=null)
liste->suivant = CreerListOcc(arbre->fd);
return liste
}
else{
printf("ta essayer de copier un arbre null dans une liste");
return null;
}
}
voila ce que je te propose ca va te ranger ta liste dans l'oredre du
premier noeur(racine, puis sous arbre gauche et droit enfin déroule
l'alogo c pas facile a explquer comme ca.
si tu préfère que ca te range le tout du plus petit sag et que ca te
fasse un parcours infixé tu déplace ta commande
liste=inserer(liste,arbre) avant le return pour sauvegarder la donnée a
un autre moment.
En gros tu gérait pas les cas ou le pointeur était null du coups tu
taillait au plus petit sag et fini tu essayait d'appeler CreerListOcc
avec le fg qui n'existe pas du coup segmentation false;)
SI je me suis trompé dis le moi je penses à priori que c'est bon mais
je ne suis pas resté très longtemps dessus nonplus j'ai probablement
pas fait gaffe à quelque chose.
darkkinjhttp://www.kinj.fr.st