原题链接:A1064 Complete Binary Search Tree
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int S[1010], T[1010], N, i = 1, j = 1;
void inOrder(int t)//按中序遍历建立完全二叉树
{
if(t > N) return ;
inOrder(2*t);//根节点下标为1,则2*t为t的左孩子、2*t+1是t的右孩子
T[t] = S[j++];//T保存完全二叉树
inOrder(2*t+1);
}
int main()
{
scanf("%d", &N);
while(i <= N) scanf("%d", &S[i++]);//S保存输入的数据
sort(S+1, S+N+1);//排序,由于二叉搜索树的中序遍历是递增排序的
inOrder(1);
printf("%d", T[1]);
for(i=2; i<=N; i++) printf(" %d", T[i]);
return 0;
}