#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
const int N=15;
int l[N],r[N],q[N];
bool hasfather[N];
void traversal(int root){
if(root==-1) return;
traversal(l[root]);
traversal(r[root]);
swap(l[root],r[root]);
}
void levelorder(int root){
int hh=0,tt=0;
q[0]=root;
while(hh<=tt){
int t=q[hh++];
if(l[t]!=-1) q[++tt]=l[t];
if(r[t]!=-1) q[++tt]=r[t];
}
cout<<q[0];
for(int i=1;i<n;i++) cout<<' '<<q[i];
}
void inorder(int root,int &k){
if(root==-1) return;
inorder(l[root],k);
k++;cout<<root;
if(k!=n) cout<<' ';
inorder(r[root],k);
}
int main(){
cin>>n;
memset(l,-1,sizeof l);
memset(r,-1,sizeof r);
for(int i=0;i<n;i++){
char lc,rc;cin>>lc>>rc;
if(lc!='-') l[i]=lc-'0',hasfather[l[i]]=true;
if(rc!='-') r[i]=rc-'0',hasfather[r[i]]=true ;
}
int root;
while(hasfather[root]==true) root++;
traversal(root);
levelorder(root);
cout<<endl;
int k=0;
inorder(root,k);
return 0;
}
1102 Invert a Binary Tree (25 分)
于 2022-04-01 20:35:24 首次发布