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出所有优先级大于等于该运算符栈顶元素,然后将该运算符入栈。最终将栈中的元素依次出栈。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)