Arbres binaires [Résolu]

Houria_20 2 Messages postés mardi 29 décembre 2015Date d'inscription 2 janvier 2016 Dernière intervention - 29 déc. 2015 à 21:57 - Dernière réponse : cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 18 avril 2018 Dernière intervention
- 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 :)
Afficher la suite 

3 réponses

Répondre au sujet
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 18 avril 2018 Dernière intervention - 29 déc. 2015 à 22:24
0
Utile
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.
Commenter la réponse de cptpingu
Houria_20 2 Messages postés mardi 29 décembre 2015Date d'inscription 2 janvier 2016 Dernière intervention - Modifié par cptpingu le 3/01/2016 à 13:08
0
Utile
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 :)
Commenter la réponse de Houria_20
cptpingu 3784 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 18 avril 2018 Dernière intervention - Modifié par cptpingu le 3/01/2016 à 13:09
0
Utile
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
Commenter la réponse de cptpingu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.