题目

题意:给出二叉树的结点信息,要求输出中序遍历表达式,其中非叶子结点要加上左右括号,除根结点 

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;
}