#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct node{
int l, r;
};
vector<node> tree;
queue<int> q;
vector<int> res;
vector<int> res2;
int temp;
void fun1(int u){ /反转的层序遍历
q.push(u);
while(!q.empty()){
temp = q.front();
q.pop();
res.push_back(temp);
if (tree[temp].r != -1){
q.push(tree[temp].r);
}
if (tree[temp].l != -1){
q.push(tree[temp].l);
}
}
}
void fun2(int u){ //反转的中序遍历
if (tree[u].r != -1){
fun2(tree[u].r);
}
res2.push_back(u);
if (tree[u].l != -1){
fun2(tree[u].l);
}
}
int main(){
int n, t;
char a, b;
node unit;
int root;
cin >> n;
int r[n] = {0};
for (int i = 0; i < n; i++){
cin >> a >> b;
if (a <= '9' && a >= '0'){
t = a - '0';
unit.l = t;
r[t] = 1;
}
else if (a == '-'){
unit.l = -1;
}
if (b <= '9' && b >= '0'){
t = b - '0';
unit.r = t;
r[t] = 1;
}
else if (b == '-'){
unit.r = -1;
}
tree.push_back(unit);
}
for (int i = 0; i < n; i++){
if (r[i] == 0) root = i;
}
fun1(root);
for (int i = 0; i < res.size(); i++){
cout << res[i];
if (i != res.size() - 1) cout << " ";
}
cout << endl;
fun2(root);
for (int i = 0; i < res2.size(); i++){
cout << res2[i];
if (i != res2.size() - 1) cout << " ";
}
}
PAT甲级1102
最新推荐文章于 2022-11-15 21:11:22 发布