Note
- 二叉树
- 模板题 思路不难
- 后序遍历&中序遍历–>层序遍历
Code
#include<bits/stdc++.h>
using namespace std;
int post[40],in[40];
vector<int> v;
struct node{
int data;
node* left;
node* right;
};
node* create(int pL,int pR,int iL,int iR){
if(pL>pR||iL>iR) return NULL;
node* root=new node;
root->data=post[pR];
int k;
for(k=iL;k<=iR;k++)
if(post[pR]==in[k]) break;
int num_left=k-iL;
root->left=create(pL,pL+num_left-1,iL,k-1);
root->right=create(pL+num_left,pR-1,k+1,iR);
return root;
}
void bfs(node* root){
queue<node*> q;
q.push(root);
while(!q.empty()){
node* nod=q.front();
q.pop();
v.push_back(nod->data);
if(nod->left!=NULL) q.push(nod->left);
if(nod->right!=NULL) q.push(nod->right);
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>post[i];
for(int i=0;i<n;i++)
cin>>in[i];
node* root=create(0,n-1,0,n-1);
bfs(root);
for(int i=0;i<v.size();i++){
if(i!=0) printf(" ");
printf("%d",v[i]);
}
return 0;
}