当前位置:网站首页>PAT甲级 1130 中缀表达式
PAT甲级 1130 中缀表达式
2022-08-02 14:23:00 【键盘奏鸣曲】
给定一个句法二叉树,请你输出相应的中缀表达式,并利用括号反映运算符的优先级。
输入格式
第一行包含整数 N 表示二叉树的总结点个数。接下来 N 行,每行以下列格式给出一个结点的信息(第 i 行对应于第 i 个结点):
data left_child right_child
其中 data 是一个长度不超过 10 的字符串,left_child 和 right_child 分别是该结点的左右子结点编号。所有结点编号从 1 到 N,NULL 用 -1 表示。
以下两个图分别对应样例 1 和样例 2。
11.JPG 222.JPG
输出格式
请在一行输出中缀表达式,并利用括号反映运算符的优先级。注意,不能有多余括号,请任何符号之间不得有空格。
数据范围
1≤N≤20
输入样例1:
8
* 8 7
a -1 -1
* 4 1
+ 2 5
b -1 -1
d -1 -1
- -1 6
c -1 -1
输出样例1:
(a+b)*(c*(-d))
输入样例2:
8
2.35 -1 -1
* 6 1
- -1 4
% 7 8
+ 2 3
a -1 -1
str -1 -1
871 -1 -1
输出样例2:
(a*2.35)+(-(str%871))
解法一:
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
string a[N];
int n, l[N], r[N], f[N];
int root;
void dfs(int u){
if(u > n) return;
if(u == -1) return;
if(!((l[u] == -1 && r[u] == -1) || u == root)) cout << '(';
dfs(l[u]);
cout << a[u];
dfs(r[u]);
if(!((l[u] == -1 && r[u] == -1) || u == root)) cout << ')';
}
int main(){
cin >> n;
memset(l, -1, sizeof l);
memset(r, -1, sizeof r);
memset(f, -1, sizeof f);
for(int i = 1; i <= n; i ++ ){
cin >> a[i];
cin >> l[i] >> r[i];
if(l[i] != -1) f[l[i]] = i;
if(r[i] != -1) f[r[i]] = i;
}
root = 1;
while(f[root] != -1) root = f[root];
dfs(root);
return 0;
}
解法二:
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
string a[N];
int n, l[N], r[N], f[N];
bool is_leaf[N];
int root;
string dfs(int u){
string left, right;
if(l[u] != -1){
left = dfs(l[u]);
if(!is_leaf[l[u]]) left = "(" + left + ")";
}
if(r[u] != -1){
right = dfs(r[u]);
if(!is_leaf[r[u]]) right = "(" + right + ")";
}
return left + a[u] + right;
}
int main(){
cin >> n;
memset(l, -1, sizeof l);
memset(r, -1, sizeof r);
memset(f, -1, sizeof f);
for(int i = 1; i <= n; i ++ ){
cin >> a[i];
cin >> l[i] >> r[i];
if(l[i] != -1) f[l[i]] = i;
if(r[i] != -1) f[r[i]] = i;
if(l[i] == -1 && r[i] == -1) is_leaf[i] = true;
}
root = 1;
while(f[root] != -1) root = f[root];
cout << dfs(root);
return 0;
}
边栏推荐
- 2021 Huawei Cup Mathematical Modeling Contest E question - Ultra-Wideband (UWB) precise positioning problem under signal interference
- ADB常用命令--测试人员必备
- 职工管理系统(SSM整合)
- 2022-0801 第六小组 瞒春 学习笔记
- 【故障诊断】基于PSO_VMD_MCKD方法的风机轴承微弱故障诊断
- 【Hiflow】 开辟新道路的自动化助手!
- DOM - Event Mechanism and Event Chain
- IIR滤波器设计之冲激响应不变法与双线性变换法
- MySQL语法入门
- 二、QT界面开发--新建C语言工程
猜你喜欢
一文让你快速写上扫雷游戏!童年的经典游戏,发给你的小女友让你装一波!!
容器中的Cgroup
[Fault Diagnosis] Weak Fault Diagnosis of Fan Bearing Based on PSO_VMD_MCKD Method
XGBoost 和随机森林在表格数据上优于深度学习?
web渗透之sql注入
Golang学习(三十五) go 连接redis
解决启动filebeat时遇到Exiting: error unpacking config data: more than one namespace configured accessing错误
【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)
2021 annual summary - complete a year of harvest
Wigner-Ville distribution for time-frequency analysis
随机推荐
一文让你快速写上扫雷游戏!童年的经典游戏,发给你的小女友让你装一波!!
容器中的Cgroup
Servlet 技术2
为什么四个字节的float表示的范围比八个字节的long要广?
加载事件的用法
DOM - Element Box Model
DOM —— 事件对象
2022-07-20 第六小组 瞒春 学习笔记
The difference and connection between dist, pdist and pdist2 in MATLAB
2021 Huawei Cup Mathematical Modeling Contest E question - Ultra-Wideband (UWB) precise positioning problem under signal interference
DOM — 元素的增删改查
js中的join()方法
单例模式(singleton pattern)
DOM - Event Mechanism and Event Chain
DOM - page rendering process
排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现之近似熵
【Hiflow】 开辟新道路的自动化助手!
2022-07-13 第五小组 瞒春 学习笔记
Servlet 技术1
DOM —— 页面的渲染流程