二叉搜索树的固定顺序:左子树<根<=右子树,
按照中序dfs顺序插入即可
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct node
{
int data;
int lchild,rchild;
};
vector<node> T;
int num[110];
int v_index=0;
void insertT(int root){
if(root==-1) return;
insertT(T[root].lchild);
T[root].data=num[v_index++];
insertT(T[root].rchild);
}
void levelOrderTraversal(int root){
if(root==-1) return;
queue<int> q;
q.push(root);
int flag_levelOrder=0;
while(!q.empty()){
int tmp=q.front();
q.pop();
printf("%s%d",flag_levelOrder==1?" ":"",T[tmp].data);
flag_levelOrder=1;
if(T[tmp].lchild!=-1) q.push(T[tmp].lchild);
if(T[tmp].rchild!=-1) q.push(T[tmp].rchild);
}
}
int main(){
int n;
scanf("%d",&n);
T.resize(n);
int t1,t2;
for(int i=0;i<n;i++){
scanf("%d %d",&t1,&t2);
T[i].lchild=t1;
T[i].rchild=t2;
}
for(int i=0;i<n;i++) scanf("%d",&num[i]);
sort(num,num+n);
insertT(0);
levelOrderTraversal(0);
return 0;
}