#include <cstdio>
#include <queue>
#include <iostream>
using namespace std;
struct Node
{
int lchild = -1, rchild = -1;
}Nodes[11];
bool isNotRoot[11];
int N;
int invert(int root){
if(root == -1)
return -1;
int tmp = Nodes[root].rchild;
Nodes[root].rchild = invert(Nodes[root].lchild);
Nodes[root].lchild = invert(tmp);
return root;
}
void levelTravel(int root){
queue<int> q;
q.push(root);
int cnt = 0;
while(!q.empty()){
cnt++;
if(cnt != N)
printf("%d ", q.front());
else
printf("%d\n", q.front());
int left = Nodes[q.front()].lchild, right = Nodes[q.front()].rchild;
if(left >= 0)
q.push(left);
if(right >= 0)
q.push(right);
q.pop();
}
}
void inTravel(int root, int &cnt){
if(root == -1)
return;
inTravel(Nodes[root].lchild, cnt);
cnt++;
if(cnt == N)
printf("%d\n", root);
else
printf("%d ", root);
inTravel(Nodes[root].rchild, cnt);
}
int main(){
scanf("%d", &N);
getchar();
for(int i = 0; i < N; i++)
isNotRoot[i] = false;
for(int i = 0; i < N; i++){
string s;
getline(cin, s);
if(s[0] != '-'){
isNotRoot[s[0] - '0'] = true;
Nodes[i].lchild = s[0] - '0';
}
if(s[2] != '-'){
isNotRoot[s[2] - '0'] = true;
Nodes[i].rchild = s[2] - '0';
}
}
int root;
for(int i = 0; i < N; i++)
if(!isNotRoot[i]){
root = i;
break;
}
invert(root);
levelTravel(root);
int cnt = 0;
inTravel(root, cnt);
return 0;
}
【PAT A1102】Invert a Binary Tree
最新推荐文章于 2021-12-11 18:05:42 发布