PAT甲级——1130 Infix Expression (25 分)
1130 Infix Expression (25 分)(找规律、中序遍历)
我是先在CSDN上面发表的这篇文章https://blog.csdn.net/weixin_44385565/article/details/89035813
Given a syntax tree (binary), you are supposed to output the corresponding infix expression, with parentheses reflecting the precedences of the operators.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤ 20) which is the total number of nodes in the syntax tree. Then N lines follow, each gives the information of a node (the i-th line corresponds to the i-th node) in the format:
data left_child right_child
where data is a string of no more than 10 characters, left_child and right_child are the indices of this node's left and right children, respectively. The nodes are indexed from 1 to N. The NULL link is represented by −1. The figures 1 and 2 correspond to the samples 1 and 2, respectively.

Output Specification:
For each case, print in a line the infix expression, with parentheses reflecting the precedences of the operators. Note that there must be no extra parentheses for the final expression, as is shown by the samples. There must be no space between any symbols.
Sample Input 1:
*
a - -
*
+
b - -
d - -
- -
c - -
Sample Output 1:
(a+b)*(c*(-d))
Sample Input 2:
2.35 - -
*
- -
%
+
a - -
str - -
- -
Sample Output 2:
(a*2.35)+(-(str%))
题目大意:将语法树输出为中缀表达式。
思路:字符就是中序遍历输出的顺序,需要注意括号的位置,观察两个样例可以总结出规律 :除了根节点,每一个运算符都有一对括号,且该运算符对应的左括号在该运算符的左子树之前输出(找到运算符后在进入下层递归之前输出),右括号在该运算符的右子树之后输出(找到运算符后等待右子树递归输出完再输出);因此以非根节点的运算符的位置为判断依据,即非根节点的非叶子节点。。。
妙啊!一下就将二叉树的前中后遍历全部考察到了并且将考察的内容隐藏在括号出现的规律里面~~
#include<iostream>
#include<vector>
#include<string>
using namespace std;
struct node {
string data;
int left, right;
};
int root;
void inorder(vector<node> &v, int index);
int main()
{
int N;
scanf("%d", &N);
vector<node> v(N + );
vector<int> flag(N + , );
for (int i = ; i <= N; i++) {
string tmp;
int left, right;
cin >> tmp;
scanf("%d%d", &left, &right);
v[i] = { tmp,left,right };
if (left != -) flag[left] = ;
if (right != -) flag[right] = ;
}
for (int i = ; i <= N; i++)//寻找根节点
if (flag[i] != ) {
root = i;
break;
}
inorder(v, root);
return ;
}
void inorder(vector<node> &v, int index)
{
if (index != -) {
if (index != root && (v[index].left != - || v[index].right != -))
printf("(");
inorder(v, v[index].left);
cout<<v[index].data;
inorder(v, v[index].right);
if (index != root && (v[index].left != - || v[index].right != -))
printf(")");
}
}
PAT甲级——1130 Infix Expression (25 分)的更多相关文章
- PAT甲级 1130. Infix Expression (25)
1130. Infix Expression (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Give ...
- PAT 甲级 1130 Infix Expression
https://pintia.cn/problem-sets/994805342720868352/problems/994805347921805312 Given a syntax tree (b ...
- PAT甲级——A1130 Infix Expression【25】
Given a syntax tree (binary), you are supposed to output the corresponding infix expression, with pa ...
- PAT 甲级 1020 Tree Traversals (25分)(后序中序链表建树,求层序)***重点复习
1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive intege ...
- PAT 甲级 1146 Topological Order (25 分)(拓扑较简单,保存入度数和出度的节点即可)
1146 Topological Order (25 分) This is a problem given in the Graduate Entrance Exam in 2018: Which ...
- PAT 甲级 1071 Speech Patterns (25 分)(map)
1071 Speech Patterns (25 分) People often have a preference among synonyms of the same word. For ex ...
- PAT 甲级 1063 Set Similarity (25 分) (新学,set的使用,printf 输出%,要%%)
1063 Set Similarity (25 分) Given two sets of integers, the similarity of the sets is defined to be ...
- PAT 甲级 1059 Prime Factors (25 分) ((新学)快速质因数分解,注意1=1)
1059 Prime Factors (25 分) Given any positive integer N, you are supposed to find all of its prime ...
- PAT 甲级 1051 Pop Sequence (25 分)(模拟栈,较简单)
1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the ord ...
随机推荐
- Windows10搭建FTP服务器
配置FTP服务器步骤: 第一步: 打开控制面板--->选择程序--->启动或关闭Windows功能--->勾选FTP服务器等.如下图: 第二步: 右键此电脑--->点击管理-- ...
- Hibernate总结(转)
原文:http://blog.csdn.net/yuebinghaoyuan/article/details/7300599 那我们看一下hibernate中整体的内容: 我们一一介绍其中的内容. H ...
- 用ASTERISK搭建自己的免费VOIP服务器
服务器别闲着,博主又要给大家带来新的玩法咯 1. 这里以 Debian 为例子,安装 Asterisk apt-get update apt-get install asterisk 2. 预设置 A ...
- Intellij IDEA 修改代码后自动编译更新
Intellij IDEA 一些不为人知的技巧 问题描述: Intellij IDEA 调试修改时,改动页面和 java 文件后,无法立刻看到变化,需要手动重启服务. 问题原因: 在 IDEA tom ...
- 英语发音规则---s发/s/的读音规则
英语发音规则---s发/s/的读音规则 一.总结 一句话总结:字母s的读音有/s/./z/./ʃ/./{/这几种,下面主要讲讲发/s/音的几条规则. 字母s的读音有/s/./z/./ʃ/./{/这几种 ...
- hdu-5742 It's All In The Mind(数学)
题目链接: It's All In The Mind Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (J ...
- python 基础之第十天(闭包,装饰器,生成器,tarfile与hashlib模块使用)
局部变量与全局变量 局部变量:在函数里面定义的,只有当函数活动时才生效 全局变量:不在函数里面的 In [1]: x=10 In [2]: def bar(): ...: x=20 ...: prin ...
- 「USACO13MAR」「LuoguP3080」 牛跑The Cow Run (区间dp
题目描述 Farmer John has forgotten to repair a hole in the fence on his farm, and his N cows (1 <= N ...
- shiro加密简单实现
1.添加shiro依赖 定义shiro的版本号 <shiro.ver>1.2.3</shiro.ver> 加入shiro的依赖 <dependency> <g ...
- java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
Java中阻塞队列接口BlockingQueue继承自Queue接口,并提供put.take阻塞方法.两个主要的阻塞类实现是ArrayBlockingQueue和LinkedBlockingQueue ...