PAT 1130

题目 : Infix Expression

分值 : 25
难度 : 中等题
思路 : 就递归往下访问嘛,总的 等于 左子树 + 自身 + 右子树 
坑点 : 因为递归实现的 在整个表达式外面就多出一个括号,我打印时要去掉,但是当只有一个节
       点时去掉就没东西打印了,因此有一个 N==1 的判断。(第三个测试点只有一个节点)

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
using namespace std;
typedef struct Node
{
string s ;
int l ;
int r;
}Nodes ;
Nodes data[21] ;
int rudu[21] ;
string find_s(int pos)
{
if(pos==-1)
return "" ;
string mid = data[pos].s ;
string l = find_s(data[pos].l) ;
string r = find_s(data[pos].r) ;
if(l==""&&r=="")
return mid ;
else
return "("+l+mid+r+")" ;
}
int main() {
int N ;
cin >> N ;
string S ;
int l ,r ;
for(int i = 1 ; i<= N ; i++)
{
cin >>S >> l >>r;
data[i].s = S;
data[i].l = l ;
data[i].r = r ;
if(l!=-1)
rudu[l]++ ;
if(r!=-1)
rudu[r]++ ;
}
int head ;
for(int i = 1 ; i<=N ; i++)
if(rudu[i] ==0)
head = i ;
//cout << head ;
string result = find_s(head);
if(N==1)
cout << result <<endl ;
else
cout <<result.substr(1,result.size()-2) <<endl ;
}