我的处理方法不是很好。用了一个二维数组。
回头要看看别的的方法。
#include<bits/stdc++.h>
using namespace std;
int in[30];
int post[30];
vector<int>level[30];
struct node{
int data;
node* lchild;
node* rchild;
int layer;
};
node* create(int inl,int inr,int postl,int postr){
if(postl>postr)return NULL;
node* root=new node;
root->data=post[postr];
int k;
for(k=inl;k<=inr;k++){
if(in[k]==root->data)break;
}
int l=k-inl;
root->lchild=create(inl,k-1,postl,postl+l-1);
root->rchild=create(k+1,inr,postl+l,postr-1);
return root;
}
int step=0;
void bfs(node* root){
queue<node*>q;
root->layer=0;
q.push(root);
while(q.size()){
node* now=q.front();
q.pop();
level[now->layer].push_back(now->data);
if(now->lchild!=NULL){
now->lchild->layer=now->layer+1;
q.push(now->lchild);
}
if(now->rchild!=NULL){
now->rchild->layer=now->layer+1;
q.push(now->rchild);
}
}
}
int main(){
int n;
cin>>n;
node*root;
for(int i=0;i<n;i++){
cin>>in[i];
}
for(int i=0;i<n;i++){
cin>>post[i];
}
root=create(0,n-1,0,n-1);
bfs(root);
for(int i=0;i<n;i++){
if(i%2==0)reverse(level[i].begin(),level[i].end());
}
int t=0;
for(int i=0;i<n;i++){
for(int j=0;j<level[i].size();j++){
printf("%d",level[i][j]);
t++;
if(t!=n)printf(" ");
}
}
return 0;
}