前缀中缀后缀表达式的转换,能帮一下吗?

前缀中缀后缀表达式的转换,能帮一下吗?,第1张

思路的话其实很简单,就是构建一棵二叉树,根行亏节点和中间节点为运算符,叶子结点为运算数字。如 a + b*c, 构建为二叉树的话,档岩神就如下图:+a * bc对于该二叉树,使用不同的遍历方式就可以得到不同的表达式了。遍历的代码很简单就不多说了。因此,你的问题主要可以分解为3个小问题:1。将后缀表达式转换为二叉树 该方法是最简单的。如a + b*c 的后缀表达式为 bc*a+.处理步骤如下:1。建立一个栈S

2。从左到右读后缀表达式,读到数字就创建叶子节点,节点值为数字值。将节点压入栈S中,读到运算符则创建中间节点,并从栈中依次d出两个节点分别为Y和X,作为中间节点的左右子节点,然后以“X 运算符 Y”的形式计算机出中间节点的值,再将此中间节点压加栈S中3。就重复第二步直至后缀表达式结束,此时栈顶的节点就是二叉树的根节点了。2。将中缀表达式转换为二叉树 按照上一个回答者的方法将中缀表达式转为后缀表达式,然后调用后缀表达式生成二叉树的解法即可。3。将前缀表达式转换为二叉树 将前缀表达式直接取反即为后缀表达式。 如前缀表达式为+*bca,对应枣液的后缀表达式为acb*+。因此,我们只需要字符串取反,然后调用后缀表达式的方法生成二叉树即可。

可通过加括卜兆号的方法来进行,下面举例讲解:

1.++a*bc*+*defg前缀转中缀

2.abc*+de*f+g*+后缀转中缀

解:

1.从右向左加括号

首先是++a*bc*+(*de)fg ==>++a*bc*(+(*de)f)g……最后到(+(+a(*bc))(*(+(*de)f)g))

可键弊培以看出每个括号都是简单的二元式,将括号内前缀转中缀,展开,得

a+b*c+(d*e+f)*g

2.从左向右加括号

首先是a(bc*)+de*f+g*+ ==>(a(bc*)+)de*f+g*+……最后到((a(bc*)+)(((de*)f+)g*)+)

同稿唯样的,可以看出每个括号都是简单的二元式,将括号内后缀转中缀,展开,得

a+b*c+(d*e+f)*g

1、中缀表达式变后缀的算法:遇到 *** 作数,物隐直接输出。

2、栈为空是,遇到运算符,直接入栈。

3、遇到左括号时,将其入栈。

4、遇到右括号时,执行薯纳出栈 *** 作,并且开始将出栈的元素输出。直到d出栈的元罩手厅素是左括号为止。

5、遇到其他运算符的时候,d出所有优先级大于等于该运算符栈顶元素,然后将该运算符入栈。最终将栈中的元素依次出栈。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12490770.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存