AcWing 1589. 构建二叉搜索树
原题链接
中等
作者:
heiyou
,
2020-05-22 00:23:50
,
所有人可见
,
阅读 1037
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int N = 110;
int l[N], r[N];
int inorder[N], q[N], val[N];
int n, index;
unordered_map<int, int> g;
void dfs(int root)
{
if(l[root] != -1) dfs(l[root]);
inorder[index ++] = root;
if(r[root] != -1) dfs(r[root]);
}
void dfs_level(int root)
{
int hh = 0, tt = 0;
q[++ tt] = root;
while(hh < tt)
{
int t = q[++ hh];
if(l[t] != -1) q[++ tt] = l[t];
if(r[t] != -1) q[++ tt] = 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 >> val[i];
sort(val, val + n);
dfs(0); //得到中序遍历序列
for(int i = 0; i < n; i ++) g[inorder[i]] = val[i];
index = 0;
dfs_level(0);
cout << g[q[1]];
for(int i = 2; i <= n; i ++) cout << " " << g[q[i]];
return 0;
}
q数组就是层序遍历的序列
写队列的时候自己坑自己了,队列从1开始存储数值
话说pat考试的时候可以调试吗