二叉查找树,中序序列一定是有序的,而完全二叉树在非最第端都是满的,可以用序号表示,即设根节点为i那么它的孩子如果存在,那么一定是2i和2i+1;基于此,我们考虑,利用中序序列填充层序的序号问题。注意考虑边际问题,即当root值大于n说明此节点为空,返回递归
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=1010;
int n,a[maxn],b[maxn],index=0;
void inorder(int root)
{
if(root>n)return;
inorder(2*root);
b[root]=a[index++];
inorder(2*root+1);
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
inorder(1);
for(int i=1;i<=n;i++)
{
printf("%d",b[i]);
if(i!=n)
printf(" ");
}
}