B1064 Complete Binary Search Tree (30分)
二叉查找数的一个实用性质:对二叉查找树进行中序遍历,遍历结果是有序的。
所以先排序处理,再根据左孩子(2x),右孩子(2x+1)中序遍历建树,层序输出只要按照下标顺序输出就好了。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <math.h>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
#define lowbit(i)((i)&(-i))
using namespace std;
typedef long long ll;
const int MAX=1e5+10;
const int INF=0x3f3f3f3f;
const int MOD=1000000007;
const int SQR=632;//633块,632个
int n,Index=0;
int a[MAX];
vector<int>vt;
void inorder(int x)
{
if(x>=n)
return ;
inorder(2*x+1);
a[x]=vt[Index++];
inorder(2*x+2);
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
vt.push_back(x);
}
sort(vt.begin(),vt.end());
inorder(0);
for(int i=0;i<n;i++)
{
if(i==0)
cout<<a[i];
else
cout<<" "<<a[i];
}
return 0;
}