import java.util.ArrayList;
import java.util.List;
public class ExpressionTree {
List<String> expArray = new ArrayList<String>();
ExpressionTreeNode root;
ExpressionTreeNode curNode;
ExpressionTreeNode left;
ExpressionTreeNode right;
String element;
public ExpressionTree(String prefixExpression) {
String[] temp = prefixExpression.split(" ");
for (int i = 0; i < temp.length; i++) {
expArray.add(temp[i]);
}
root = createExpressionTree(expArray);
System.out.println(root);
}
private ExpressionTreeNode createExpressionTree(List<String> prefixExpression) {
element = prefixExpression.get(0);
prefixExpression.remove(0);
if (isNumeric(element)) {
return new Leaf(Double.parseDouble(element));
} else {
left = createExpressionTree(prefixExpression);
right = createExpressionTree(prefixExpression);
}
return new ExpressionTreeNode(left, right, element);
}
private static boolean isNumeric(String str) {
try {
double d = Double.parseDouble(str);
} catch(NumberFormatException nfe) {
return false;
}
return true;
}
}
Это мой код, который я хочу, чтобы вернуть дерево выражения, когда дано выражение типа * + 5 4 - 3/2 1. Выход я получаю, хотя это что-то вроде этого:Создать двоичное дерево выражений из префиксного обозначения?
1
|\
2 1
/\
2 1
/\
2 1
Когда я пытаюсь получить:
*
/\
+ -
/\ /\
5 4 3/
/\
2 1
Любые советы? Почему единственными элементами моего дерева являются последние два элемента выражения? Я чувствую, что мне не хватает чего-то очевидного.
возможно дубликат [Синтаксический арифметическое выражение и построения дерева из него в Java] (http://stackoverflow.com/questions/4589951/parsing-an-arithmetic-expression-and-building-a- tree-from-it-in-java) – EJP