思路
1)当要求完全二叉树时,该二叉树的形态已经固定,我们定义了一个CBT数组用来层次存储二叉树的结点。
2)由于要求是二叉排序树,又因为二叉排序树的中序遍历结果是个有序的数列,因此可以先将输入的数组排序,再依次填入CBT数组,最后遍历输出即可。
#include <cstdio>
#include <vector>
#include <algorithm>
const int maxen = 1010;
using namespace std;
int CBT[maxen],number[maxen];
int index=0,n;
void Inorder(int root)
{
if(root>n) return;
Inorder(root*2);
CBT[root] = number[index++];
Inorder(root*2+1);
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&number[i]);
}
sort(number,number+n);
Inorder(1);
printf("%d",CBT[1]);
for(int i=2;i<=n;i++)
{
printf(" %d",CBT[i]);
}
return 0;
}