Arbres binaires

Résolu
Houria_20 Messages postés 2 Date d'inscription mardi 29 décembre 2015 Statut Membre Dernière intervention 2 janvier 2016 - 29 déc. 2015 à 21:57
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 3 janv. 2016 à 13:08
Bonsoir,
Est ce que vous pouvez m'aider pour construire un arbre binaire à partire d'une pile(la pile contient la forme postfixée d'un expression arithmétique) puis evalué l'expression (le résultat doit être affiché à la racine de l'arbre)
le langage utilisé: C
Merci d'avance :)

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 déc. 2015 à 22:24
Bonjour.

Comme dit dans le règlement, nous ne faisons ni le travail, ni les recherches, ni la réflexion à la place du demandeur. En revanche, nous aidons avec grand plaisir à corriger un code ou à aider la conception d'une architecture de code existante que tu proposerais (et qui serait déjà finalisé, juste un besoin de relecture). C'est ici un site d'aide aux développeurs passionnés par des développeurs passionnés qui cherchent à améliorer leurs codes et non un site de service, ou l'on réalise un produit fini à la demande.

Je t'invite donc à poster ton code (dans des balises de code) et à indiquer ce qui te bloque très précisément.
0
Houria_20 Messages postés 2 Date d'inscription mardi 29 décembre 2015 Statut Membre Dernière intervention 2 janvier 2016
Modifié par cptpingu le 3/01/2016 à 13:08
Voici la fonction construire que j'ai réalisé :
noeud* creer_arbrebinaire(stack *P)
{
    printf("vv");
    noeud *a;
    elem c;
    c=Pop(&P);
    a=(arbre *)malloc(sizeof(arbre));
    if(Operateur(c))
    {
        printf("hh");
        a->info=c;
        a->succd=creer_arbrebinaire(P);
        a->succg=creer_arbrebinaire(P);
    }
    else if(Operande(c))
    {
        a->info=c;
        a->succg=NULL;
        a->succd=NULL;
    }
    return a;
}


et voici son appel dans la fonction main :

while(!EmptyStack(S))    /** creation de l'arbre**/
    {
        R=creer_arbrebinaire(S);
    }


Mais le problème c'est qu'il boucle sans créer l'arbre (j'ai fais plusieur tests et j'ai conclus que lors de l'appel de la fonction , il ne rentre ni dans if (opérateur) ni else if (opérande)!!!)

Mercii d'avance :)
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 3/01/2016 à 13:09
Pour la boucle, impossible de savoir si tu rentres dedans car tu ne donnes ni le code précédent cette instruction, ni le code de EmptyStack.
En revanche, ça me paraît bizarre que tu assignes R à chaque tour de boucle. Soit alors un if devrait être plus adéquate qu'un while, soit R doit être enfilé avec le reste. Impossible de te répondre ne voyant pas "tout".

Pour la fonction creer_arbrebinaire, vérifie que tes fonction Operande et Operateur fonctionne bien. Ajoute un "else" en plus à la fin des tests d'operande dans lequel tu mets un assert(false) (avec un include <assert.h>), afin de t'assurer que ce cas n'arrive jamais.

PS: Pense aux balises de code. Je te les ai ajouté dans ton post.


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Rejoignez-nous