解题思路:BST的中序遍历结果是给出数组从小到大的排列,所以在中序遍历过程中把值赋进去,最后层序输出结果。
代码如下:
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define ll long long
#define INF 0x3f3f3f3f
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
struct node{
int key,lchild,rchild,layer,index;
}tree[105];
int w[105];
int n;
int cnt=0;
bool cmp(node a,node b){
if(a.layer!=b.layer) return a.layer<b.layer;
return a.index<b.index;
}
void dfs(int root,int index,int layer){
if(tree[root].lchild==-1&&tree[root].rchild==-1){
tree[root].key=w[cnt++];
tree[root].index=index;
tree[root].layer=layer;
}else{
if(tree[root].lchild!=-1)
dfs(tree[root].lchild,index*2+1,layer+1);
tree[root].key=w[cnt++];
tree[root].index=index;
tree[root].layer=layer;
if(tree[root].rchild!=-1)
dfs(tree[root].rchild,index*2+2,layer+1);
}
}
int main() {
cin>>n;
int root,next;
for(int i=0;i<n;i++)
scanf("%d%d",&tree[i].lchild,&tree[i].rchild);
for(int i=0;i<n;i++)
cin>>w[i];
sort(w,w+n);
dfs(0,0,0);
sort(tree,tree+n,cmp);
for(int i=0;i<n;i++){
if(i!=0) cout<<' ';
cout<<tree[i].key;
}
return 0;
}