begin process at 2012 05 28 23:49:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

créer une liste à partir d'un arbre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

créer une liste à partir d'un arbre

mardi 11 janvier 2005 à 13:10:24 | créer une liste à partir d'un arbre

morganistic

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
}
mercredi 12 janvier 2005 à 22:22:22 | Re : créer une liste à partir d'un arbre

darkkinj


////////////////////////////////////////////////////
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


Cette discussion est classée dans : arbre, liste, noeud, struct, maillon


Répondre à ce message

Sujets en rapport avec ce message

Les arbres en C [ par nadias ] Bonsoir tout le monde,Je voudrai SVP etre corriger s'il y a erreur merci.On me demande de creer un arbre. Voici la consigne:"Cette arbre possède des n Arbre binaire [ par granoli ] Bonjour, et bonne année 2007,J'aimerais un algorithme simple de création d'arbre binaire.J'ai bien compris le concept des arbres binaires mais j'ai du Liste de classes template [ par Rouliann ] Bonjour à tous.Mon problème est le suivant :J'ai une classe que je définis comme cecitemplate class property{        string name;        T value;     les liste chainée [ par korimatsu ] bonjour a tous je voulé juste savoir une chose si j'écris mon maillon de cette façon typedef struct maillon {int v; struct maillon *suiv; }maillo Division de deux polynomes [ par tareknaj ] Bonjour, J'ai besoin d'une fonction qui effectue la division de deux polynomes. Un polynome est exprime sous forme d'une liste chainee: ////////////// Fonction recherche (listes chainées) [ par adri10 ] Bonjour à tous, Bon voilà j'ai un gros problème avec ma fonction recherche en liste chainées. Je pensais que mon programme était correct puisqu'en le erreur en execution [ par marooh ] bonjour, j'ai ecrit un code qui à partir d'un fichier charge les données dans un arbre binaire de recherche. ça compile et tout mais en executant ça s creation arbre contenat une liste chainé [ par breakkk ] for(i=0;i<N;i++) printf("je....:p"); Svp Je Veux Commznt creer un arbre contenant une liste chainé, par exemle l'arbre represent un service , et chaq RECURSIVITE pour tous les traitements sur les arbres et liste chaînée - Langage C [ par HerveYims ] Bonjour à tous, SVP j'ai un bug avec mon programme ci-dessous en fait : Soit un fichier des concerts donnés en 2011 en Europe comprenant les noms de


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales