静态二叉树的构造
中序遍历
递归
#include <bits/stdc++.h>
using namespace std;
#define maxn 30
int n;
vector<string>ans;
struct node{
string data;int left;int right;
}a[maxn];
void init(){
cin>>n;
for(int i=1;i<=n;i++){
string s;int left;int right;cin>>s>>left>>right;
a[i].data=s;a[i].left=left;a[i].right=right;
}
}
int findroot(){
for(int i=1;i<=n;i++){
bool flag= true;
for(int j=1;j<=n;j++){
if(a[j].left==i||a[j].right==i){
flag= false;
break;
}
}
if(flag){
return i;
}
}
}
void inorder(int start){
if(start<0)
return;
if(a[start].left!=-1||a[start].right!=-1) //非叶节点
ans.push_back("(");
inorder(a[start].left);
ans.push_back(a[start].data);
inorder(a[start].right);
if(a[start].left!=-1||a[start].right!=-1) //非叶节点
ans.push_back(")");
}
int main() {
init();
inorder(findroot());
if(ans.size()>1){
ans.erase(ans.begin());ans.erase(ans.end());
}
for(int i=0;i<ans.size();i++)
cout<<ans[i]<<"";
}