本题与1064 Complete Binary Search Tree类似,区别在于完全二叉搜索树层序遍历可直接输出,本题是普通二叉搜索树,层序遍历需要一次bfs。
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n;
int l[N], r[N], tr[N], w[N];
void dfs(int u, int &k)
{
if(l[u] != -1) dfs(l[u], k);
tr[u] = w[k ++];
if(r[u] != -1) dfs(r[u], k);
}
void bfs()
{
queue<int> q;
q.push(0);
bool first = true;
while(q.size())
{
auto t = q.front();
q.pop();
if(first)
{
cout << tr[t];
first = false;
}
else cout << ' ' << tr[t];
if(l[t] != -1) q.push(l[t]);
if(r[t] != -1) q.push(r[t]);
}
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++) cin >> l[i] >> r[i];
for(int i = 0; i < n; i++) cin >> w[i];
sort(w, w + n);
int k = 0;
dfs(0, k);
bfs();
}