这道题用数组表示法表示完全二叉树,写的神清气爽啊,抓住两点,首先,下标1开始,那么左子树是2*i,右子树是2*i+1. 然后是二叉排序树的性质,二叉排序树的中序遍历是一个排序好的数组。然后我们就可以用中序遍历填好完全二叉树数组,最后按序输出就是层次遍历了。
#include <algorithm>
#include <stdio.h>
#include <iostream>
using namespace std;
int N;
int arr[1005];
int Tree[1005];
int cnt=0;
void inorder(int root){
if (root*2<=N)
inorder(root*2);
Tree[root]=arr[cnt++];
if (root*2+1<=N)
inorder(root*2+1);
}
int main(){
scanf("%d",&N);
for (int i=0; i<N; i++) {
scanf("%d",&arr[i]);
}
sort(arr, arr+N);
inorder(1);
for (int i=1; i<=N; i++) {
if (i==1)
printf("%d",Tree[i]);
else
printf(" %d",Tree[i]);
}
printf("\n");
return 0;
}