本题考察完全二叉搜索树的生成方法,应充分利用完全二叉搜索树的性质。
坑点如下
1,通过对输入的序列从小到大排列得到中序序列(二叉搜索树的性质)
2,设立一个CBT数组,应用完全二叉搜素树的性质将中序序列的数一一存入数组中。注意递归边界为,结点编号大于结点个数。
void tree(int root){
if(root>n)return ;
tree(root*2);
CBT[root]=in[num++];
tree(root*2+1);
}
3,存储的CBT数组本身为层序序列,直接输出即可
整体代码如下
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1010;
int n,CBT[maxn],in[maxn];
int num=0;
void tree(int root){
if(root>n)return ;
tree(root*2);
CBT[root]=in[num++];
tree(root*2+1);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
{scanf("%d",&in[i]);}
sort(in,in+n);
tree(1);
for(int i=1;i<=n;i++){
printf("%d",CBT[i]);
if(i!=n)printf(" ");
}
}