1326_利用二叉树对表达式求值

2022-5-16 18:17| 发布者: Hocassian| 查看: 46| 评论: 0|原作者: 肇庆学院ACM合集

摘要:
C:\Users\Administrator\Downloads\2019-10-12-10-14-2-89503776543100-Problem List-采集的数据-后羿采集器.html

Pro.ID

1326

Title

利用二叉树对表达式求值

Title链接

http://10.20.2.8/oj/exercise/problem?problem_id=1326

AC

8

Submit

164

Ratio

4.88%

时间&空间限制

  • Time Limit: 600/200 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others)
  • 描述

    把一条正常表示的算术表达式(即中缀表达式),存储为一棵二叉树,然后对这棵二叉树进行后序遍历,即可得到该表达式的后缀表达式形式。然后就可利用前面所学知识对该表达式求值。

    如有中缀表达式:(a+b)*c-d/e ,转为后缀表达式后:ab+c*de/-  。

    在把中缀表达式存储为二叉树的过程中,考虑到有括号的存在、以及运算符的优先级别,需要用到函数precede(),因此提供该函数所用到的"算符优先关系表"如下:

    上表包含了幂运算"^",其中的除法"/"是整数除法,即结果不含小数点。其中的i即表示运算数。

    请对所给出的表达式进行求值。

    输入

    有多个测试用例:每个表达式占一行。表达式中的运算数均为一位的正整数。表达式中不含空格,表达式最后以'#'表示结束。

    不保证所有表达式都合法。表达式长度不超过1000个字符。

    输出

    Description

    把一条正常表示的算术表达式(即中缀表达式),存储为一棵二叉树,然后对这棵二叉树进行后序遍历,即可得到该表达式的后缀表达式形式。然后就可利用前面所学知识对该表达式求值。

    如有中缀表达式:(a+b)*c-d/e ,转为后缀表达式后:ab+c*de/-  。

    在把中缀表达式存储为二叉树的过程中,考虑到有括号的存在、以及运算符的优先级别,需要用到函数precede(),因此提供该函数所用到的"算符优先关系表"如下:

    上表包含了幂运算"^",其中的除法"/"是整数除法,即结果不含小数点。其中的i即表示运算数。

    请对所给出的表达式进行求值。

    Input

    有多个测试用例:每个表达式占一行。表达式中的运算数均为一位的正整数。表达式中不含空格,表达式最后以'#'表示结束。

    不保证所有表达式都合法。表达式长度不超过1000个字符。

    Output

    对每个表达式输出一行结果:该表达式的运算结果。如该表达式合法,则保证运算结果在32-bit整数范围之内。

    如该表达式不合法,请输出一行 "ERROR" 。

    Sample Input

    (3+2)*8-9/4#
    (3*3-1)/4+2^5#
    (4-2)/(1-7/7)#
    2^(6-4#
    (9+8)7#

    Sample Output

    38
    34
    ERROR
    ERROR
    ERROR

    Hint

    (4-2)/(1-7/7)#    这个表达式导致"除0"
    2^(6-4#           这个表达式缺一个右括号
    (9+8)7#           这个表达式缺乘号

    Author

    样例输入

    (3+2)*8-9/4#
    (3*3-1)/4+2^5#
    (4-2)/(1-7/7)#
    2^(6-4#
    (9+8)7#

    样例输出

    38
    34
    ERROR
    ERROR
    ERROR

    提示

    (4-2)/(1-7/7)#    这个表达式导致"除0"
    2^(6-4#           这个表达式缺一个右括号
    (9+8)7#           这个表达式缺乘号


    路过

    雷人

    握手

    鲜花

    鸡蛋

    最新评论

    返回顶部