可能这道题不会再考了 但是思想不能忘记
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 35;
struct node
{
int data;
node* left;
node* right;
}tree[MAXN];
int in[MAXN];
int post[MAXN];
int level[MAXN];
int layer[MAXN];
int num = 0;
node* create(int postl,int postr,int inl,int inr)
{
if(postl > postr)
{
return NULL;
}
node* root = new node;
root -> data = post[postr];
int k;
for(k = inl;k<=inr;k++)
{
if(in[k] == post[postr])
{
break;
}
}
int numleft = k - inl;
root -> left = create(postl,postl + numleft - 1,inl,k-1);
root -> right = create(postl + numleft,postr - 1,k+1,inr);
return root;
}
void BFS(node* root)
{
queue<node* > q;
q.push(root);
while(!q.empty())
{
node* u = q.front();
layer[num++] = u -> data;
q.pop();
if(u -> left != NULL)
{
q.push(u -> left);
}
if(u -> right != NULL)
{
q.push(u -> right);
}
}
}
int main(void)
{
freopen("pat0314/in.txt","r",stdin);
int n;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>post[i];
}
for(int i = 1;i<=n;i++)
{
cin>>in[i];
// cout<<in[i];
}
node * root = new node;
root = create(1,n,1,n);
BFS(root);
for(int i = 0;i<num;i++)
{
if(i == 0)
{
cout<<layer[i];
}
else
{
cout<<" "<<layer[i];
}
}
return 0;
}