注意:如果没考虑只有一个根节点的情况,测试点2会出错
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct Node{
string data;
int lchild,rchild;
};
Node nodes[25];
bool isRoot[25];
string res = "";
void trav(int root){
if(nodes[root].lchild == -1 && nodes[root].rchild == -1){
res += nodes[root].data;
return;
}
res += "(";
if(nodes[root].lchild != -1)
trav(nodes[root].lchild);
res += nodes[root].data;
if(nodes[root].rchild != -1)
trav(nodes[root].rchild);
res += ")";
return;
}
int main(){
int n;
scanf("%d",&n);
fill(isRoot,isRoot + 25,true);
for(int i = 1;i <= n;i++){
cin>>nodes[i].data;
scanf("%d %d",&nodes[i].lchild,&nodes[i].rchild);
if(nodes[i].lchild != -1)
isRoot[nodes[i].lchild] = false;
if(nodes[i].rchild != -1)
isRoot[nodes[i].rchild] = false;
}
if(n == 1){
cout<<nodes[1].data;
system("pause");
return 0;
}
int root;
for(int i = 1;i <= n;i++){
if(isRoot[i] == true){
root = i;
break;
}
}
trav(root);
int len = res.length();
res = res.substr(1,len - 2);
cout<<res;
system("pause");
return 0;
}