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