35,15,+,80,70,-,*,20,/ //后缀表达方式 (((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式
方法一:
一个中缀式到其他式子的转换方法~~
或者后面找运算符。而不是中间找,那么也就直接可以口算拉
后缀表达法,我们又把它称为逆波兰(Reverse Polish Notation ,RPN ),用它可以实现简单的四则运算求值
像“9+(3-1)*3+10/2”用后缀表示法应该是“9 3 1 – 3 * + 10 2 / +”
方法二:二叉树求解法
表达式A*B:左子树为表达式A,右子树为表达式B,可以先求左子树所表示的表达式的值,再求右子树所表示的表达式的值,最后二者相乘。注意,所画出的二叉树,它的叶子节点为数值,非叶子节点是运算符。画出二叉树以后,依次进行前序遍历和后序遍历,可以得出前缀表达式和后缀表达式。
例如美团曾经出过的一个笔试题目:

解答:
根据题目,我们可以画出二叉树,如图所示:

然后根据后序遍历,即可得出后缀表达式,前序遍历即可得出前缀表达式~
后缀表达式转中缀表达式:
从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即称为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是有括号或者优先级不高于栈顶符号则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出到后缀表达式为止。
后缀表达式计算结果:
从从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到是符号,就将处于栈顶的两个数字出栈,进行运算,运算结果出栈(这里应该是将运算结果再入栈才对),一直到最终获得结果
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209121.html原文链接:https://javaforall.net
