Créer une liste à partir d'un arbre

morganistic Messages postés 6 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 22 mars 2007 - 11 janv. 2005 à 13:10
darkkinj Messages postés 18 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 12 mars 2005 - 12 janv. 2005 à 22:22
bonjour a tous!
voila deux structures : une liste et un arbre.
je n arrive pas a parcourir un arbre en inserant chaque noeud
de l arbre dans une liste...
////////////////////////////////////////////////////
typedef struct maillon
{
NOEUD * 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.*/

MAILLON * liste;if((liste (MAILLON *)malloc(sizeof(MAILLON))) NULL)
{ perror("malloc failed "); abort; }

/*on traite le noeud*/
liste = inserer(liste,arbre);

/*on traite le fils gauche*/
liste->suivant = CreerListOcc(arbre->fg);

/*on traite le fils droit*/
liste->suivant = CreerListOcc(arbre->fd);

return liste
}

1 réponse

darkkinj Messages postés 18 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 12 mars 2005
12 janv. 2005 à 22:22
////////////////////////////////////////////////////

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.

darkkinj
http://www.kinj.fr.st
0
Rejoignez-nous