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 ...
随机推荐
- linux shell执行远程计算机上的命令或者脚本(ssh)
大数据平台下经常建立设计多个节点的集群需要统一部署,这就设计到守护进程或者部署脚本在不同节点执行,如果能在master机器上,统一执行脚本,一次性启动整个集群的服务,感觉很nice.因为,分享如下内容 ...
- Adjusting Network Connection
Adjusting Network Connection The Selenium Mobile JSON Wire Protocol Specification supports an API fo ...
- vue-面试
1.单页面应用与多页面应用的去别 2.简述一下Sass.Less,且说明区别? 他们是动态的样式语言,是CSS预处理器,CSS上的一种抽象层.他们是一种特殊的语法/语言而编译成CSS.变量符不一样,l ...
- [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...
- ping请求超时的解决方法
我们有时需要进行远程或者共享对方数据库的时候,会ping一下对方电脑,时候能够ping通,时候能够进行数据的传输.有时会出现ping请求超时,那么遇到这个问题该怎么解决? 我们首要解决的是看他自己是否 ...
- jQuery ajax中的get请求方法汇总
$.get() Defination and Usage 从服务端以HTTP GET方式获取数据 Examples 请求test.php,但是忽略返回的数据 $.get("test.php& ...
- java虚拟机内存溢出和泄漏实例
测试参数设置: 1.循环调用new A()实现堆溢出,java.lang.OutOfMemoryError: Java heap space, 虚拟机参数:-Xms1M -Xmx1M -XX:+Hea ...
- P2647 最大收益
题目描述 现在你面前有n个物品,编号分别为1,2,3,……,n.你可以在这当中任意选择任意多个物品.其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的收益:但是,你选择该物 ...
- codevs 1147 排座椅
传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接 ...
- bzoj 2151 种树——贪心+后悔
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2151 似乎是半年+前讲过的.(然而看到的时候却不会了) 考虑贪心,限制就是不能选两边的.如果 ...