题意:给你一颗中缀表达式的树,让你求出他的表达式。
思路:中序遍历即可,注意加括号,如果孩子是单个节点就不需要加括号了。
代码:
#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;
}