Arbres binaires [Résolu]

Messages postés
2
Date d'inscription
mardi 29 décembre 2015
Statut
Membre
Dernière intervention
2 janvier 2016
- - Dernière réponse : cptpingu
Messages postés
3835
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
- 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

Messages postés
3835
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
0
Merci
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
Messages postés
2
Date d'inscription
mardi 29 décembre 2015
Statut
Membre
Dernière intervention
2 janvier 2016
0
Merci
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
Messages postés
3835
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
10 juin 2019
85
0
Merci
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