题意:给出二叉树的结点信息,要求输出中序遍历表达式,其中非叶子结点要加上左右括号,除根结点
tip:中序遍历
#include<iostream>
using namespace std;
int s[22][3];//存储树的结点联系
string data[22];//存储树的结点值
string inorder(int start) {
if(start==-1)
return "";
//遍历当前结点左孩子
string a= s[start][0]==-1&&s[start][1]==-1?"":"("+inorder(s[start][0]);
a+= data[start];//当前结点值
//遍历当前结点右孩子
a+= s[start][0]==-1&&s[start][1]==-1?"":inorder(s[start][1])+")";
return a;
}
int main() {
int n;
cin>>n;
int checked[n+1]= {0};
for(int i=1; i<=n; ++i) {
string a;
int b,c;
cin>>a>>b>>c;
data[i]=a;
if(b!=-1)
checked[b]=1;
if(c!=-1)
checked[c]=1;
s[i][0]=b;
s[i][1]=c;
}
if(n==1) {//坑
cout<<data[1]<<endl;
return 0;
}
int start ;
for(int i=1; i<=n; ++i)
if(!checked[i]) {//找出根结点
start=i;
break;
}
string ans=inorder(start);
ans=ans.substr(1,ans.size()-2);//去掉最左和最右的括号
cout<<ans;
return 0;
}