#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node{
int left,right;
};
int cnt=0,N,root;
vector<int> notRoot;
vector<node> tree;
void bfs(int x){
queue<int> q;
q.push(x);
while(!q.empty()){
int front=q.front();
q.pop();
if(cnt++>0)
printf(" ");
printf("%d",front);
if(tree[front].right!=-1)
q.push(tree[front].right);
if(tree[front].left!=-1)
q.push(tree[front].left);
}
}
void inOrder(int x){
if(x>N) return;
if(tree[x].right!=-1) inOrder(tree[x].right);
printf("%d",x);
if(cnt-->1)
printf(" ");
if(tree[x].left!=-1) inOrder(tree[x].left);
}
int main(){
char a,b;
cin>>N;
tree.resize(N);
notRoot.resize(N);
for(int i=0;i<N;i++){
cin>>a>>b;
if(a=='-'){
tree[i].left=-1;
}else{
tree[i].left=a-'0';
notRoot[a-'0']=1;
}
if(b=='-'){
tree[i].right=-1;
}else{
tree[i].right=b-'0';
notRoot[b-'0']=1;
}
}
for(int i=0;i<N;i++){
if(notRoot[i]==0){
root=i;
break;
}
}
bfs(root);
printf("\n");
inOrder(root);
return 0;
}
1102 Invert a Binary Tree
最新推荐文章于 2019-12-23 13:28:34 发布