Czy ktoś mógłby wyjaśnić, jak zbudować binarne drzewo wyrażeń.Buduj drzewo binarnej ekspresji
Na przykład mam ciąg 2*(1+(2*1));
Jak przekonwertować to na binarne drzewo wyrażeń.
*
| \
| \
2 +
|\
1 *
|\
2 1
Czy ktoś mógłby wyjaśnić, jak zbudować binarne drzewo wyrażeń.Buduj drzewo binarnej ekspresji
Na przykład mam ciąg 2*(1+(2*1));
Jak przekonwertować to na binarne drzewo wyrażeń.
*
| \
| \
2 +
|\
1 *
|\
2 1
Konwersja wyrażenia na notację przedrostkową lub przyrostkową. Stamtąd powinno być całkiem proste. Algorytmy są wymienione w następujących linkach wiki.
trzeba będzie:
na przykład spojrzeć na tego podejścia: http://en.wikipedia.org/wiki/Recursive_descent_parser
istnieją inne
Prawdopodobnie jest to przesada, ponieważ jest to dość proste zadanie do wizualnego przedstawienia sposobu analizowania wyrażeń. –
Konwersja infix do postfix lub przedrostek
Wejście Postfix: ab + CDE + **
Java
public Tree.TreeNode createExpressionTree(){
Iterator<Character>itr = postOrder.iterator();
Tree tree = new Tree();
NodeStack nodeStack = new NodeStack();
Tree.TreeNode node;
while (itr.hasNext()) {
Character c = itr.next();
if(!isDigit(c)){
node = tree.createNode(c);
node.right = nodeStack.pop();
node.left = nodeStack.pop();
nodeStack.push(node);
}else{
node = tree.creteNode(c);
nodeStack.push(node);
}
}
node = nodeStack.pop();
return node;
}
Więcej informacji: http://en.wikipedia.org/wiki/Binary_expression_tree
Tutaj symbol = operator –
To może być podzielony na dwa etapy:
Obliczyć priorytet dla każdego tokena.
Na przykład: '+': 1, 'x',: 2, liczba INF, '(': dodanie 10 do podstawy, ')': odjąć 10 od podstawy)
budowy Cartesian tree oparciu priorytet przy użyciu stosu (około 5 linii kodu)
Możesz to zrobić w jednym skanie.
Można wdrożyć rozwiązanie za pomocą algorytmu manewrowego. Oto kilka szczegółów na wikipiedii:. Ten algo został wymyślony przez Edsger Dijkstra, jest to bardzo fajna alternatywa.Jeśli potrzebujesz trochę szczegółów, mogę napisać przykład kodu, który napisałem w C# jakiś czas temu, ale przypuszczam, że link wikipedia jest więcej niż wystarczający. –