比赛场次 | 658 |
---|---|
比赛名称 | 板子大赛 |
比赛状态 | 已结束比赛成绩 |
开始时间 | 2025-01-22 08:00:00 |
结束时间 | 2025-01-22 17:00:00 |
开放分组 | 全部用户 |
注释介绍 | 都是板子,AK吧! |
题目名称 | 表达式树 |
---|---|
输入输出 | expr_tree.in/out |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试点数 | 10 简单对比 |
用户 | 结果 | 时间 | 内存 | 得分 |
---|---|---|---|---|
|
AAAAAAAAAA | 0.015 s | 1.56 MiB | 100 |
|
AAAAAAAAAA | 0.030 s | 3.33 MiB | 100 |
|
AAAAAAAAAA | 0.030 s | 3.41 MiB | 100 |
|
AAAAAAAAAA | 0.030 s | 3.52 MiB | 100 |
|
AAAAAAAAAA | 0.033 s | 3.50 MiB | 100 |
|
AATAAAAAAA | 2.026 s | 3.27 MiB | 90 |
中缀表达式可以转化为一棵由运算符和运算数构成的二叉树。
例如,中缀表达式9/3+6*(8-3)
可以转化为如下二叉树:
通过观察可以发现,操作数都在叶子结点中,操作符在内部结点中。
表达式树的后序遍历就是后缀表达式,在对子树进行后序遍历后,直接用根结点的运算符对左右子树的结果进行运算即可得出表达式的值。
现在给定一棵二叉树,请你求出对应表达式的值。
输入包含若干行。
第一行一个整数$n(2\leq n\leq 50)$,表示操作数的个数。
第一行$n$个整数,表示$n$个操作数(叶子结点),它们在二叉树的结点编号分别为$1$到$n$。
接下来$n-1$行,表示$n-1$个操作符,它们在二叉树中的结点编号分别为$n+1$到$2n-1$。
每行首先输入一个运算符(+-*/
),然后输入两个整数分别表示左孩子和右孩子的编号。
对于除法运算,使用整除。
一行一个整数,表示表达式的值(输入保证运算中间和最后结果不超过int
)。
5 9 3 6 8 3 / 1 2 + 6 8 * 3 9 - 4 5
33
输入数据建立的表达式树如下