#include <iostream>
#include <algorithm>
using namespace std;
const int N=110;
int n;
int l[N],r[N];//存放左右子树的序号
int q[N];
int a[N],w[N];
void inorder(int u,int &k){//u为序号
if(u==-1) return;
inorder(l[u],k);
w[u]=a[k++];
inorder(r[u],k);
}
void bfs(){
int hh=0,tt=0;
q[0]=0;
while(hh<=tt){
int t=q[hh++];
if(l[t]!=-1) q[++tt]=l[t];
if(r[t]!=-1) q[++tt]=r[t];
}
cout<<w[q[0]];
for(int i=1;i<n;i++) cout<<' '<<w[q[i]];
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>l[i]>>r[i];
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);//a中现在为中序遍历
int k=0;
inorder(0,k);
bfs();
return 0;
}
1099 Build A Binary Search Tree (30 分)
于 2022-03-28 21:21:54 首次发布