//vector<node> v,存树
//中序遍历:可以设一个flag,根符号不需要括号,剩下的输出括号
//最后一个测试点没过!!!???
/*#include<bits/stdc++.h>
#define MAXN 25
using namespace std;
struct node{ //存树
string data;
int left, right;
}v[MAXN];
int flag[MAXN]; //目的:找到根节点
int root;
void InOrder(int now){
if(now == -1) return;
if( now != root && (v[now].data == "*" || v[now].data == "-" || v[now].data == "+" || v[now].data == "%")){
cout << "(";
}
InOrder(v[now].left);
cout << v[now].data;
InOrder(v[now].right);
if( now != root &&(v[now].data == "*" || v[now].data == "-" || v[now].data == "+" || v[now].data == "%"))
cout << ")";
}
int main(){
int n; cin >> n;
for(int i = 1; i <= n; i++){ //存储树
cin >> v[i].data;
cin >> v[i].left >> v[i].right;
if(v[i].left!=-1){
flag[v[i].left] =1;
}
if(v[i].right!=-1){
flag[v[i].right] = 1;
}
}
int i;
for(i = 1; i <= n; i++)
if(!flag[i]) break;
root = i;
InOrder(i);
return 0;
}*/
修改后思路:
//改正:最外层可能会被括号包起来,也可能不被包起来————>因为不知道根节点或近邻节点那种情况(底层根是不是符号————即加没加括号),最后判断即可
//递归的真实彻底理解————————>中序遍历,
//如果当前根不是数字而是运算符,就加括号,最后再总判断去除多余的外括号即可。
#include<bits/stdc++.h>
#