Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : créer une liste à partir d'un arbre [ Archives / Maths & Algorithmes ] (morganistic)

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é 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;     Liste et arbre [ par TSniper ] Bonjour,j'ai un exercice qui me casse la tête si vous pouvez m'aider ça va etre vraiment sympa:En fait l'exercice est:un étudiant caracterise par son Fichier + liste chainée [ par Evisu ] Bonsoir,J'ai une question concernant l'écriture et la lecture de liste chainée dans un fichier.dataJ'ai une structure PERS qui contient des infos (nom arbre lexicographique [ par finoss ] Bonjour,Je dois réalisé pour un projet un arbre lexicographique en C, j'ai réussi à faire le code pour importer les 16000 mots depuis un fichier texte créer arbre.. [ par abdelkaderg54 ] Salut à tous , ben voilà j'été entrain de faire un petit programme en c++ Il s'agit de deffirentes fonctions pour manipuler un arbre binnair de recher faire un projet enc [ par nana87 ] slt, j'ai eu un programme en c mais je dois le réorganiser sous forme des fichier pour faire un projet ,il y a quelqu'un qui peut m'aider pour ce prob Arbre et dictionnaire [ par Hugo Dam ] Bonsoir, J'ai un projet en langage C, dans lequel il me faut créer un arbre contenant les mots d'un dictionnaire contenu dans un fichier texte. J'ar Liste chainée Template maillon externe [ par Timidouveg ] Bonjour :)Je n'ai pas compris comment fonctionne les template. J'ai cherché des explications sur internet, mais j'avoue que ça m'échappe un peu :sJe s


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.