还是利用BST树的自身特点,利用中序遍历填充树,然后BFS层序遍历输出。
附本人AC代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
struct Node {
int val, left, right;
};
vector<Node>V;
vector<int>val;
int index = 0, flag = 0;
void inorder(int x) {
if (x == -1)return;
inorder(V[x].left);
V[x].val = val[index++];
inorder(V[x].right);
}
int main() {
int N;
scanf("%d", &N);
V.resize(N);
val.resize(N);
for (int i = 0; i < N; i++) {
scanf("%d %d", &V[i].left, &V[i].right);
}
for (int i = 0; i < N; i++)scanf("%d", &val[i]);
sort(val.begin(), val.end());
inorder(0);
queue<int>Q;
Q.push(0);
while (Q.size() != 0) {
int t = Q.front();
Q.pop();
if (flag == 0) {
flag = 1;
printf("%d", V[t].val);
}
else printf(" %d", V[t].val);
if (V[t].left != -1)Q.push(V[t].left);
if (V[t].right != -1)Q.push(V[t].right);
}
return 0;
}