//完全二叉搜索树,用数组存储,下标从1开始,左儿子为下标*2,右儿子为下标*2+1;
//利用BST中序遍历的性质,将排好序的元素一一插入,最后按照下标遍历扫描一遍即可
#include <stdio.h>
#include <stdlib.h>
int compare(const void*a,const void *b){
return (*(int*)a-*(int*)b);
}
void add_to_tree_inorder(int *tree,int *a,int current_pos,int N);
int count;
int main() {
int N;
scanf("%d",&N);
int *a=(int*)malloc(sizeof(int)*N);
for(int i=0;i<N;i++) //将元素存储在数组中
scanf("%d",&a[i]);
qsort(a, N, sizeof(int), compare); //排序
int *tree=(int*)malloc(sizeof(int)*(N+1));
add_to_tree_inorder(tree, a, 1, N); //利用中序遍历插入元素
for(int i=1;i<=N;i++){
if(i==1)
printf("%d",tree[i]);
else
printf(" %d",tree[i]);
}
return 0;
}
void add_to_tree_inorder(int *tree,int *a,int current_pos,int N){
if(current_pos<=N){
add_to_tree_inorder(tree, a,current_pos*2, N);
tree[current_pos]=a[count++];
add_to_tree_inorder(tree, a,current_pos*2+1, N);
}
}