由完全二叉树和二叉搜索树构造出二叉树,然后层次遍历
先画出完全二叉树的模样,即确定左右孩子,因为都存储的是序号,左孩子为2*i,右孩子为2*i+1
由于bst中序遍历为有序的,因此中序遍历时确定data值
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAX 10010
struct no{
int data;
int lchild;
int rchild;
}node[MAX];
int n;
int num[MAX];
void create(){
for(int i=1;i<=n;i++){
if(2*i<=n){
node[i].lchild=2*i;
}else{
node[i].lchild=-1;
}
if(2*i+1<=n){
node[i].rchild=2*i+1;
}else{
node[i].rchild=-1;
}
}
}
int i=1;
void inorder(int x){
if(x!=-1){
inorder(node[x].lchild);
node[x].data=num[i++];
inorder(node[x].rchild);
}
}
int main(){
freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&num[i]);
}
sort(num+1,num+n+1);
create();
inorder(1);
for(int i=1;i<=n;i++){
if(i==n){
printf("%d\n",node[i].data);
}else{
printf("%d ",node[i].data);
}
}
return 0;
}