PAT A1130. Infix Expression (25)
来源:互联网 发布:淘宝招商 编辑:程序博客网 时间:2024/06/05 12:48
1130. Infix Expression (25)
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:8* 8 7a -1 -1* 4 1+ 2 5b -1 -1d -1 -1- -1 6c -1 -1Sample Output 1:
(a+b)*(c*(-d))Sample Input 2:
82.35 -1 -1* 6 1- -1 4% 7 8+ 2 3a -1 -1str -1 -1871 -1 -1Sample Output 2:
(a*2.35)+(-(str%871))解答思路:
1.用静态方法建立二叉树,并确定二叉树头结点(建立一个bool数组进行判断,若标号i作为左右子树出现过,则不为头结点)
2.中序遍历二叉树。
2.1若结点不为叶子结点(右子树不为空),且不是头结点(题目要求最外侧无括号),输出左括号
2.2遍历左子树;输出data;遍历右子树;
2.3若结点不为叶子结点(右子树不为空),且不是头结点(题目要求最外侧无括号),输出右括号
代码:
#include <stdio.h>#define MAX 21using namespace std;struct Node{char data[11];int left, right;}node[MAX];int n, root;bool judge[MAX] = {false};void inorder(int root, int level){if(root != -1){if(node[root].right != -1 && level > 0) printf("(");inorder(node[root].left, level+1);printf("%s", node[root].data);inorder(node[root].right, level+1);if(node[root].right != -1 && level > 0)printf(")");}}int main(){scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%s %d %d", node[i].data, &node[i].left, &node[i].right);if(node[i].left != -1) judge[node[i].left] = true;if(node[i].right != -1) judge[node[i].right] = true;}for(int i = 1; i <= n; i++){if(!judge[i]){root = i;break;}}inorder(root, 0);return 0;}
- PAT A1130. Infix Expression (25)
- PAT 1130. Infix Expression (25)
- PAT 1130. Infix Expression (25)
- PAT 1130. Infix Expression (25)-甲级
- PAT甲级 1130. Infix Expression (25)
- 【PAT】【Advanced Level】1130. Infix Expression (25)
- PAT 甲级 1130. Infix Expression (25)
- PAT (Advanced Level) Practise 1130 Infix Expression (25)
- PAT (Advanced Level) Practise 1130 Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- 1130. Infix Expression (25)
- PAT--1130. Infix Expression(中序加括号)
- PAT(A)-1130. Infix Expression (25)(树的中序遍历)
- Java常见HTTP请求方法RequestMethod
- php使用curl的SSL和非SSL
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
- CS231n课程笔记翻译:卷积神经网络笔记
- 函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
- PAT A1130. Infix Expression (25)
- xamarin android异步更新UI线程
- Swift 结构体
- 博客
- Xcode 清理存储空间
- 网易笔试题-堆棋子
- Application Server was not connected before run configuration stop, reason: Unable to ping server at
- 各种空格   等等
- 使用vue闪现vue代码