Quelqu'un pourrait-il expliquer comment construire un arbre d'expression binaire.
Par exemple, j'ai une chaîne 2 * (1+ (2 * 1)); code> Comment convertir cela en une expression binaire Arbre. P>
*
| \
| \
2 +
|\
1 *
|\
2 1
4 Réponses :
Convertissez l'expression en notation préfixe ou postfix. De là, il devrait être assez simple. Les algorithmes sont mentionnés dans les liens Wiki suivants. P>
Vous devrez: P>
Par exemple, jetez un coup d'œil à cette approche: http://en.wikipedia.org/wiki/ RECURSIVE_DESCENT_PARSER P>
Il y a d'autres p>
Ceci est probablement surchargé pour ce qui est une affectation plutôt simple à montrer visuellement comment les expressions sont analysées.
Convertir Infix en Postfix ou Prefix
L'entrée Postfix est: A B + C D E + ** ** P>
implémentation Java p> Plus d'infos: http://fr.wikipedia.org/wiki/binary_expression_tree p> p>
Ici symbol = opérateur
Il peut être divisé en deux étapes: p>
Calculez la valeur de priorité pour chaque jeton. p>
Par exemple: '+': 1, 'X': 2, Numéro: Inf, '(': Ajoutez 10 à Base, ')': Soustrait 10 de la base) P> LI>
construire arbre cartésien en fonction de la priorité en utilisant une pile (environ 5 lignes de code) p> li> ol>
Vous pouvez le faire en une seule numérisation. P>
Vous pouvez implémenter une solution à l'aide de l'algorithme de la cour de la cour. Voici quelques détails sur WikiPiedia: << a href = "https://fr.wikipedia.org/wiki/shunting-yard_algorithm" rel = "Nofollow Noreferrer"> en.wikipedia.org/wiki/shunting-yard_algorithm a >>. Cet algo a été inventé par Edsger Dijkstra, c'est une très belle alternative. Si vous avez besoin de détails, je peux poster un exemple de code que j'ai écrit dans C # il y a quelque temps mais je suppose que le lien Wikipedia est plus que suffisant.