排序后,递归插入左-根-右子树
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
struct node
{
int data;
int lchild,rchild;
};
int n;
int v[1010];
vector<node> T;
int v_index=0;
int insertT(int index){
if(index>=n) return -1;
T[index].lchild=insertT(index*2+1);
T[index].data=v[v_index++];
T[index].rchild=insertT(index*2+2);
return index;
}
int flag_levelOrder=0;
void levelOrderTraversal(int root){
if(root==-1) return;
queue<int> q;
q.push(root);
while(!q.empty()){
int tmp=q.front();
q.pop();
printf("%s%d",flag_levelOrder==1?" ":"",T[tmp].data);
flag_levelOrder=1;
if(T[tmp].lchild!=-1) q.push(T[tmp].lchild);
if(T[tmp].rchild!=-1) q.push(T[tmp].rchild);
}
}
int main(){
scanf("%d",&n);
T.resize(n);
for(int i=0;i<n;i++) scanf("%d",&v[i]);
sort(v,v+n);
int root=insertT(0);
levelOrderTraversal(root);
return 0;
}