当前位置:网站首页>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;
}
边栏推荐
- XML和注解(Annotation)
- lammps学习(二)联合原子模型聚乙烯拉伸
- 【数据知多少】一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)
- 2022-07-23 第六小组 瞒春 学习笔记
- MATLAB中dist与pdist、pdist2的区别与联系
- 二、QT界面开发--新建C语言工程
- 【数据读写】csv文件与xls/xlsx文件
- 我的第一篇博客
- 【Frequency Domain Analysis】Spectral leakage, frequency resolution, picket fence effect
- ADB常用命令--测试人员必备
猜你喜欢
解决启动filebeat时遇到Exiting: error unpacking config data: more than one namespace configured accessing错误
JS中的数组方法和循环
2021 annual summary - complete a year of harvest
在命令行或者pycharm安装库时出现:ModuleNotFoundError: No module named ‘pip‘ 解决方法
flask获取post请求参数
web渗透之文件上传漏洞
lambda表达式、Stream接口及Optional类
为什么四个字节的float表示的范围比八个字节的long要广
一文让你快速手写C语言-三子棋游戏
nodejs 的下载安装与环境配置
随机推荐
数据库性能优化的误区!
BOM(Browser Object Model)浏览器对象模型相关概念
Window function method for FIR filter design
页面返回顶部和固定导航栏js基础案例
解决启动filebeat时遇到Exiting: error unpacking config data: more than one namespace configured accessing错误
ELK日志分析系统
【web渗透】文件包含漏洞入门级超详细讲解
DOM - Element Box Model
DOM - Event Object
有效的括号【暴力、分支判断、哈希表】
DOM —— 元素盒子模型
Golang基础教程
类加载过程
排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现之近似熵
JS本地存储(附实例)
延时函数-定时器
数据源,分层开发以及jsp标签总结及相关代码
DOM —— 页面的渲染流程
【频域分析】频谱泄露、频率分辨率、栅栏效应
2022-7-15 第五组 瞒春 学习笔记