我编写了一个代码,它从给定的字符串表达式创建一个二进制表达式树:
public ExprIF buildExpressionTree(String s)
{
for(int i = 0; i<s.length(); i++)
{
if(Character.isDigit(s.charAt(i)) || isOperator(s.charAt(i)))//containOp(s,i))
{
treeRoot = new Expr(s.charAt(i));
stack.push(treeRoot);
}
else if(s.charAt(i) == '(')
{
//do nothing
}
else
{
rightSubTree = stack.pop();
treeRoot = stack.pop();
leftSubTree = stack.pop();
treeRoot.setLeft(leftSubTree);
treeRoot.setRight(rightSubTree);
stack.push(treeRoot);
}
}
return stack.pop();
}
当我在纸上测试它时,它运行良好。问题是这个错误:
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at java.util.Stack.pop(Stack.java:84)
at builder.TreeBuilder.buildExpressionTree(TreeBuilder.java:49)
at builder.TreeBuilder.build(TreeBuilder.java:29)
at Main.main(Main.java:12)
这个错误的原因是什么?