题目名称 1673. 表达式树
输入输出 expr_tree.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarsyzhaoss 于2025-01-20加入
开放分组 全部用户
提交状态
分类标签
表达式树 二叉树
分享题解
通过:0, 提交:1, 通过率:0%
GravatarTeaWine 90 2.025 s 3.28 MiB C++
本题关联比赛
板子大赛
关于 表达式树 的近10条评论(全部评论)

1673. 表达式树

★★   输入文件:expr_tree.in   输出文件:expr_tree.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

中缀表达式可以转化为一棵由运算符和运算数构成的二叉树。

例如,中缀表达式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

【样例解释】

输入数据建立的表达式树如下