Arbre à partir d'une expression fonctionnelle

gdavis -  
 Utilisateur anonyme -
Bonjour,

Merci tous pour les différentes contributiions me permettant de comprendre progressivement mon apprentissage autour dr mon ptit projet.

Je suis quand même buté encore à un point:

Quel principe utiliser pour construire un arbre à partir d'une expression de la forme fonctionnelle.

Une expression de la forme fonctionnelle est par exemple *(-(+(a,b),c),d) qui représente la forme infixée (((a+b)-c)*d).

Merci d'avance pour votre contribution.
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. Utilisateur anonyme
     
    Il faut créer une fonction récursive qui va lire chaque caractère de ta forme fonctionnelle :
    Si tu tombes sur un opérateur (/*-+) tu ajoutes un noeud à gauche.
    Si tu tombes sur une variable : tu ajoutes une feuille à gauche si le noeud courant n'en possède pas, à droite s'il en possède et tu remontes d'un cran dans l'arbre (puisque les deux feuilles sont établies).
    0
    1. gdavis
       
      Bsoir d0o0b.


      J'essaie un truc comme ci-dessous, çà me donne pas le résultat.

      char main ()
      {
      Noeud *racine;

      char c;
      racine = NULL;


      printf ("Etrer le aractère '#' pour terminer! ");
      scanf (c);
      while (c!='#') {
      CreerArbre (&racine, c);
      printf ("Etrer le aractère '#' pour terminer! ");
      scanf (c);
      }

      void CreerArbre (Noeud ** racine, char c)
      {
      Noeud *nouveau;

      nouveau = alloc ();

      if (*racine == NULL) {
      nouveau->nb = n;
      nouveau->gauche = NULL;
      nouveau->droite = NULL;
      *racine = nouveau;
      }
      else if (n < (*racine)->nb)
      CreerArbre (&(*racine)->gauche, c);
      else if (n > (*racine)->nb)
      CreerArbre (&(*racine)->droite, c);
      }

      (Merci Lami 20j)

      Merci d0o0b
      0
      1. Utilisateur anonyme > gdavis
         
        J'y connais pas grand chose en C, mais je vois pas où se trouve le test des opérateurs dans ce programme.
        De plus, il y a une conditionnelle qui porte sur la variable n dans CreerArbre() qui n'est initialiser que dans un autre bloc conditionnel, donc inaccessible.
        0