题目
考察点
二叉搜索树的性质- 二叉排序树的中序遍历序列是递增的
- 使用数组来存放一个完全二叉树,那么对完全二叉树当中的任何一个结点,其左孩子的编号是2x,而右孩子的编号是2x+1
- 完全二叉树到达空结点的标志是当前结点root的编号大于结点个数n
思路
二叉排序树的中序遍历是递增的,因此将输入的顺序从小到大排序,就是此二叉树的中序遍历序列,通过此二叉排序序列就可以构建出完全二叉搜索树
代码
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Blog: https://blog.csdn.net/weixin_41234001
*
* Author: DoBetter
*
* Time: 2019.12.01
*
* Describe: 构建一颗完全二叉树,并通过层序遍历的方式输出
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;
int CBT[maxn], number[maxn];
int n,index=1;
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=1;i<=n;i++)
{
scanf("%d", &number[i]);
}
//排序,从小到大排序
sort(number+1, number + n+1);
//层序遍历
inOrder(1);
//输出
for (int i=1;i<=n;i++)
{
printf("%d", CBT[i]);
if (i<n)
{
printf(" ");
}
}
return 0;
}