PAT 1130. Infix Expression (25)(中缀表达式)

xiaoxiao2021-02-28  47

题意:给你一颗中缀表达式的树,让你求出他的表达式。

思路:中序遍历即可,注意加括号,如果孩子是单个节点就不需要加括号了。

代码:

#include<bits/stdc++.h> using namespace std; const int maxn = 105; int lch[maxn], rch[maxn], n, root; char val[maxn][maxn]; bool book[maxn]; void show(int cur) { if(lch[cur] != -1) { if((lch[lch[cur]] != -1 ||rch[lch[cur]] != -1)) printf("("); show(lch[cur]); if((lch[lch[cur]] != -1 ||rch[lch[cur]] != -1)) printf(")"); } printf("%s", val[cur]); if(rch[cur] != -1) { if((lch[rch[cur]] != -1 ||rch[rch[cur]] != -1)) printf("("); show(rch[cur]); if((lch[rch[cur]] != -1 ||rch[rch[cur]] != -1)) printf(")"); } } int main(void) { while(cin >> n) { memset(book, 0, sizeof(book)); memset(lch, -1, sizeof(lch)); memset(rch, -1, sizeof(rch)); for(int i = 1; i <= n; i++) { int l, r; scanf(" %s %d%d", val[i], &l, &r); if(l != -1) book[l] = 1, lch[i] = l; if(r != -1) book[r] = 1, rch[i] = r; } for(int i = 1; i <= n; i++) if(!book[i]) { root = i; break; } show(root); puts(""); } return 0; }

转载请注明原文地址: https://www.6miu.com/read-2614761.html

最新回复(0)