题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805407749357568
- 题目是建立一颗完全二叉排序树,再输出层序遍历序列
- 确认过眼神,是我不会写的题
- 原理应该是让CBT的中序遍历是按照number顺序的,因此先把number排个序,在中序遍历数组,令其等于已排好序的number,这样再次中序遍历数组的时候就会得到顺序排列的元素了。而且这样的数组,本身输出就是层序遍历的顺序
- 机试前再看一次吧,会做就是秒杀
代码
#include<iostream>#include<cstdio>#include<algorithm>#include<vector>using namespace std;typedef long long int;const int maxn = 1010;int n;int number[maxn], CBT[maxn], index = 0;void Inder(int root){if(root > n) return;Inder(root * 2);CBT[root] = number[index++];Inder(root * 2 + 1);return;}int main(){scanf("%d",&n);for(int i = 0; i < n; i++){scanf("%d",&number[i]);}sort(number, number + n);Inder(1);for(int i = 1; i <= n; i++){printf("%d",CBT[i]);if(i != n) printf(" ");}}
