- 题目地址
- 题目分析:
利用二叉搜索树的特性,我们可以sort得到中序遍历结果,只需将这个中序遍历放入这个数目确认的完全二叉树即可。
直接通过确认数目的完全二叉树的中序遍历,获得数组型完全二叉树的编号中序,而完全二叉树的data中序遍历结果已经存在了sort后的数组in当中。
这里充分利用了各种树的特性,达到了简洁而优雅,哈哈哈。
- 我的代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int n, in[1001], mark[1001], ini = 1;
void mapping(int t) {
if (t * 2 <= n) mapping(t * 2);
mark[t] = in[ini++];//此刻的t即代表中序遍历的序号,
if (t * 2 + 1 <= n) mapping(t * 2 + 1);//而in当中已经按照中序一个一个排好队了
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &in[i]);
sort(in + 1, in + n + 1);
mapping(1);
for (int i = 1; i <= n; i++)//根据完全二叉树的数组形式性质,依次输出即层序遍历
printf("%d%c", mark[i], i == n ? '\n' : ' ');
return 0;
}