题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805380754817024
思路:遍历顺序是中序遍历,所以只要把当前搜索到的节点放到后面输出即可
代码:
#include <bits/stdc++.h>
#include <sstream>
using namespace std;
const int maxn = 105;
string a[maxn];
int c[maxn],n,d;
vector <int> ans;
void dfs() {
if(a[d][1] == 'u' ) {
int tmp = c[d];
d++;
dfs();
if(d < 2*n && a[d][1] == 'u') dfs(); //判断有没有右子树
else d++;
ans.push_back(tmp);
}
else {
d++;
return;
}
}
int main() {
ios::sync_with_stdio(0);
cin >> n;
for(int i = 0; i < 2*n; i++) {
cin >> a[i];
if(a[i][1] == 'u') {
int t;
cin >> t;
c[i] = t;
}
}
d = 0;
dfs();
for(int i = 0; i < ans.size(); i++) {
if(i > 0)cout << " ";
cout << ans[i];
}
cout << "\n";
return 0;
}