后序中序建树+层序遍历
#include <iostream>
using namespace std;
#define maxn 50
typedef struct node{
int data;
node*left;
node*right;
}*tree;
void createTree(tree &t,int post[],int in[],int spost,int epost,int sin,int ein){
if(sin>ein)return;
int rpos;
for (rpos=sin;rpos<=ein;rpos++) {
if(in[rpos]==post[epost])break;
}
t=new node();
t->data=in[rpos];
int length=rpos-sin;
createTree(t->left,post,in,spost,spost+length-1,sin,sin+length-1);
createTree(t->right,post,in,spost+length,epost-1,sin+length+1,ein);
}
void levelTraverse(tree t,int n){
tree queue[maxn];
int front=0;
int rear=0;
int count=0;
queue[rear++]=t;
while(rear!=front){
tree temp=queue[front++];
if(count!=n-1)
cout<<temp->data<<" ";
else
cout<<temp->data;
count++;
if(temp->left!=NULL)
queue[rear++]=temp->left;
if(temp->right!=NULL)
queue[rear++]=temp->right;
}
}
int main(){
int n;
cin>>n;
int post[n],in[n];
for (int i = 0; i < n; ++i) cin>>post[i];
for (int i = 0; i < n; ++i) cin>>in[i];
tree t=NULL;
createTree(t,post,in,0,n-1,0,n-1);
levelTraverse(t,n);
return 0;
}