满二叉树root编号为1时候,对结点n,左子树编号为2n,右子树编号为2n+1。输入元素从小到大排列,再按照中序给二叉排序树赋值,即可得到完全二叉排序树。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1010;
int cbt[maxn], number[maxn];
int n,num=0;
void inorder(int root)
{
if (root > n) return;
inorder(root * 2);
cbt[root] = number[num++];
inorder(root * 2 + 1);
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &number[i]);
}
sort(number, number + n);
inorder(1);
for (int i = 1; i <= n; i++)
{
printf("%d", cbt[i]);
if (i < n ) printf(" ");
}
return 0;
}