构建树,输出层序遍历。
板子题,背背背
#include<bits/stdc++.h>
using namespace std;
int postorder[30];
int inorder[30];
struct node{
int data;
node* lchild;
node* rchild;
};
node* create(int postl,int postr,int inl,int inr){
if(postl>postr)return NULL;
node* root=new node;
root->data=postorder[postr];
int k;
for(k=inl;k<=inr;k++){
if(inorder[k]==postorder[postr]) break;
}
int n=k-inl;
root->lchild=create(postl,postl+n-1,inl,k-1);
root->rchild=create(postl+n,postr-1,k+1,inr);
return root;
}
void bfs(node*root){
queue<node*>q;
q.push(root);
while(q.size()!=0){
node*now=q.front();
q.pop();
// printf("%d",q.size());
printf("%d",now->data);
if(now->lchild!=NULL)q.push(now->lchild);
if(now->rchild!=NULL)q.push(now->rchild);
if(q.size()!=0)printf(" ");
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>postorder[i];
}
for(int i=0;i<n;i++){
cin>>inorder[i];
}
node*root=create(0,n-1,0,n-1);
bfs(root);
return 0;
}