PAT (Advanced Level) Practice_1064 Complete Binary Search Tree (30 分)_简洁而优雅的解法

利用二叉搜索树的特性,我们可以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;
}

 

posted @ 2019-08-04 17:34  kingdalf  阅读(6)  评论(0)    收藏  举报  来源