PAT 甲级 1130 Infix Expression

思路:

1.先建树,再对树进行先根遍历;
2.若遍历某个结点不是叶子结点且不是根结点,则此次的表达式要用括号包围;
3.值一定是叶子结点,运算符一定不是叶子结点;

代码:

#include<iostream>
#include<unordered_map>
using namespace std;
struct node{
	string val;
	int left,right;
};
unordered_map<int,node> mp;
int root;
string dfs(int n){
	string s=mp[n].val;
	if(mp[n].left!=-1) s=dfs(mp[n].left)+s;
	if(mp[n].right!=-1) s+=dfs(mp[n].right);
	if(n!=root&&(mp[n].left!=-1||mp[n].right!=-1))
		s='('+s+')';
	return s;
}
int main(){
	int n;
	cin>>n;
	root=n*(n+1)/2;
	for(int i=1;i<=n;i++){
		cin>>mp[i].val>>mp[i].left>>mp[i].right;
		if(mp[i].left!=-1) root-=mp[i].left;
		if(mp[i].right!=-1) root-=mp[i].right;
	}
	cout<<dfs(root);
	return 0;
}
原文地址:https://www.cnblogs.com/yuhan-blog/p/12309056.html