反向建树然后层序遍历输出 中序遍历输出
#include<iostream>
#include<vector>
using namespace std;
struct node{
int left=-1;
int right=-1;
}Node[10];
vector<int> le[10];
int isroot[10]={0};
int root;
void Level(int x,int level){
if(x==-1) return;
le[level].push_back(x);
Level(Node[x].left,level+1);
Level(Node[x].right,level+1);
}
string in(int x){
if(x==-1) return "";
return in(Node[x].left)+" "+to_string(x)+in(Node[x].right);
}
int main(){
int N;
cin>>N;
for(int i=0;i<N;i++){
string a,b;
cin>>a>>b;
if(a!="-"){
Node[i].right=stoi(a);
isroot[stoi(a)]=1;
}
if(b!="-"){
Node[i].left=stoi(b);
isroot[stoi(b)]=1;
}
}
for(int i=0;i<N;i++){
if(isroot[i]==0){
root=i;
break;
}
}
Level(root,0);
printf("%d",root);
for(int i=1;i<N;i++){
for(auto it:le[i]){
printf(" %d",it);
}
}
printf("\n");
string ans=in(root);
ans.erase(ans.begin());
cout<<ans;
return 0;
}