前缀表达式、中缀表达式、后缀表达式及其转换

前缀表达式、中缀表达式、后缀表达式及其转换

中缀式到其他式子的转换方法

一个中缀表达式如:
a+bc-(d+e)
第一步:按照运算符的优先级对所有的运算单位加括号~
式子变成拉:((a+(b
c))-(d+e))
第二步:转换前缀与后缀表达式
前缀:把运算符号移动到对应的括号前面
则变成拉:-( +(a (bc)) +(de))
把括号去掉:-+a
bc+de 前缀式子出现
后缀:把运算符号移动到对应的括号后面
则变成拉:((a(bc)* )+ (de)+ )-
把括号去掉:abc*+de± 后缀式子出现
发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。

二叉树求解法

表达式A*B:左子树为表达式A,右子树为表达式B,可以先求左子树所表示的表达式的值,再求右子树所表示的表达式的值,最后二者相乘。注意,所画出的二叉树,它的叶子节点为数值,非叶子节点是运算符。画出二叉树以后,依次进行前序遍历和后序遍历,可以得出前缀表达式和后缀表达式。

前缀、后缀表达式求值

前缀:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
后缀:从左至右扫描表达式,同上

猜你喜欢

转载自blog.csdn.net/qq_40151857/article/details/82871857