建一棵二叉树,树的结构已经给出来了,然后就是按照二叉搜索树的性质,利用中序遍历把数据填进去就行了,
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
struct node {
int data, lchild, rchild;
} Node[1005];
int cnt = 0;
vi v;
void inorder(int root) {
if (root == -1) return;
inorder(Node[root].lchild);
Node[root].data = v[cnt++];
inorder(Node[root].rchild);
}
void bfs(int root) {
queue<int> q;
q.push(root);
int ok = 1;
while (!q.empty()) {
int now = q.front();
q.pop();
if (ok) ok--;
else cout << " ";
cout << Node[now].data;
if (Node[now].lchild != -1) q.push(Node[now].lchild);
if (Node[now].rchild != -1) q.push(Node[now].rchild);
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
Node[i].lchild = a;
Node[i].rchild = b;
}
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v.pb(x);
}
sort(all(v));
inorder(0);
bfs(0);
return 0;
}