用静态链表建树,然后只要交换两个元素的值就反转了。
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <iostream>
using namespace std;
vector<int> child[11],bfs,infs;
bool root[11]={false};
queue<int> Q;
void invert(const int &n){
for(int i=0;i<n;++i){
swap(child[i][0],child[i][1]);
}
}
void BFS(const int &root){
Q.push(root);
while(!Q.empty()){
int q=Q.front();
Q.pop();
bfs.push_back(q);
if(child[q][0]!=-1)Q.push(child[q][0]);
if(child[q][1]!=-1)Q.push(child[q][1]);
}
}
void INFS(const int &root){
if(root!=-1){
INFS(child[root][0]);
infs.push_back(root);
INFS(child[root][1]);
}
}
int find_root(const int &n){
for(int i=0;i<n;++i)
if(!root[i])return i;
}
int main(void){
//freopen("in.log","r",stdin);
int n;
cin>>n;
for(int i=0;i<n;++i){
string tmpl,tmpr;
cin>>tmpl>>tmpr;
if(tmpl!="-"){
int l=stoi(tmpl);
child[i].push_back(l);
root[l]=true;
}
else{
child[i].push_back(-1);
}
if(tmpr!="-"){
int r=stoi(tmpr);
child[i].push_back(r);
root[r]=true;
}
else{
child[i].push_back(-1);
}
}
invert(n);
int btree=find_root(n);
BFS(btree);
INFS(btree);
int i=0;
for(int c:bfs){
(i++)?cout<<" "<<c:cout<<c;
}
cout<<endl;
int j=0;
for(int c:infs){
(j++)?cout<<" "<<c:cout<<c;
}
cout<<endl;
return 0;
}