7-15 jmu-ds-二叉树实现表达式求解 (25 分)
用二叉树来表示表达式,树的每一个节点包括一个运算符和运算数。代数表达式中只包含+
,-
,*
,/
,(
,)
和一位整数且没有错误。按照先括号,再乘除,后加减的规则构造二叉树。如图所示是"1+(2+3)*2-4/5"代数表达式对应二叉树,用对应的二叉树计算表达式的值。
输入格式:
输入一行表达式字符串,括号内只能有一个运算符。
输出格式:
输出表达式的计算结果.如果除数为0,提示divide 0 error!
输入样例1:
(1+2)*3-4/5+(3-2)
输出样例1:
9.2
输入样例2:
1+2*3-4
输出样例2:
3
这道题不用考虑是否输入了两位数,和括号内只有一个运算符,所以思路较为简单,先将括号里的表达式和'*' 及'/' 转化为单个数字, 用两个栈分别存储运算后的各个数字与+,-顺序。
最后两个栈弹出一个运算符和两个运算数,由于栈的特性会导致运算顺序颠倒如:4-3-2,会先弹出-,2,3,运算结果为1,存入,再弹出-,1,4,运算结果为3,变成了4-(3-2)。因此另设了两个栈来使其顺序正确,先弹出-,4,3,结果为1,再弹出-,1,2,结果为-1