题意:已知后序(postorder)与中序遍历(inorder),求先序遍历(preorder)
具体题解,可以看看我的这篇文章,三种遍历求法都整理好了
已知:先序与中序||后序与中序||先序与后序,求二叉树-CSDN博客
本题代码AC代码:
#include<bits/stdc++.h>
using namespace std;
int pre[50],post[50],in[50];
struct node{
int v;
node* l;
node* r;
node(int u):v(u){}//构造函数
};
int pos;
node* create(int l,int r){
if(l>r)return new node(-1);
// cout<<indx<<endl;
node* nod=new node(post[pos--]);
int mid;
for(mid=l;mid<=r;mid++){
if(in[mid]==nod->v)break;
}
nod->r=create(mid+1,r);
nod->l=create(l,mid-1);
return nod;
}
void bfs(node* nod){
queue<node*>q;
q.push(nod);
int flag=0;//处理空格
while(q.size()){
int len=q.size();
while(len--){
nod=q.front(),q.pop();
if(nod->v==-1)continue;
if(flag)cout<<' ';
cout<<nod->v;flag=1;
q.push(nod->l);
q.push(nod->r);
}
}
}
int main(){
int n;cin>>n;
pos=n-1;
for(int i=0;i<n;i++)cin>>post[i];
for(int i=0;i<n;i++)cin>>in[i];
node* nod=create(0,n-1);
bfs(nod);
}