AcWing 1550. 完全二叉搜索树
原题链接
中等
作者:
heiyou
,
2020-05-21 22:12:34
,
所有人可见
,
阅读 1025
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n, index;
int tree[N], position[N], ans[N];
void dfs(int a)
{
if(a > n) return;
if(2 * a + 1 < n) dfs(2 * a + 1);
position[index ++] = a;
if(2 * a + 2 < n) dfs(2 * a + 2);
}
int main()
{
cin >> n;
for(int i = 0; i < n; i ++) cin >> tree[i];
sort(tree, tree + n);
dfs(0);
for(int i = 0; i < n; i ++)
{
ans[position[i]] = tree[i];
}
cout << ans[0];
for(int i = 1; i < n; i ++) cout << " " << ans[i];
return 0;
}
开始的时候写错的地方:
没有意识到 2 * a + 1 < n 这句 不可以等于n, 范围是0 - (n - 1)