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