#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1010;
int n, number[maxn], CBT[maxn], index = 0; //n为结点个数,number用以存放结点权值
//CBT用以存放完全二叉树,index从小到大枚举number数组
void inOrder(int root) //中序遍历,巧妙之处
{
if(root > n) //空结点,直接返回
return;
inOrder(root * 2); //往左子树递归
CBT[root] = number[index++]; //根结点处赋值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); //1号位为根结点
for(int i = 1; i <= n; i++)
{
printf("%d", CBT[i]); //CBT数组序列本身就是层序序列
if(i < n)
printf(" ");
}
return 0;
}
【PAT A1064】Complete Binary Search Tree
于 2023-04-25 18:08:04 首次发布