由于二叉查找树的中序遍历为递增序列,因此题目中的完全二叉查找树的中序遍历也应为递增序列,又由于完全二叉树的特点,某结点i的左儿子编号为2*i,右儿子编号为2*i+1。
AC代码:
#include<iostream>
#include<map>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<list>
#include<set>
#include<stack>
#include<cmath>
#include<vector>
using namespace std;
int a[1005];
int n;
struct node
{
int data,l,r;
};
node b[1005];
void create()
{
for(int i=1;i<=n;i++)
{
if(2*i<=n)
{
b[i].l=2*i;
}
else
{
b[i].l=-1;
}
if(2*i+1<=n)
{
b[i].r=i*2+1;
}
else
{
b[i].r=-1;
}
}
}
int num=1;
void inorder(int x)
{
if(x!=-1)
{
inorder(b[x].l);
b[x].data=a[num++];
inorder(b[x].r);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
create();
inorder(1);
for(int i=1;i<=n;i++)
{
if(i!=n)
{
printf("%d ",b[i].data);
}
else
{
printf("%d",b[i].data);
}
}
}