题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805407749357568

  1. 题目是建立一颗完全二叉排序树,再输出层序遍历序列
  2. 确认过眼神,是我不会写的题
  3. 原理应该是让CBT的中序遍历是按照number顺序的,因此先把number排个序,在中序遍历数组,令其等于已排好序的number,这样再次中序遍历数组的时候就会得到顺序排列的元素了。而且这样的数组,本身输出就是层序遍历的顺序
  4. 机试前再看一次吧,会做就是秒杀

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<vector>
  5. using namespace std;
  6. typedef long long int;
  7. const int maxn = 1010;
  8. int n;
  9. int number[maxn], CBT[maxn], index = 0;
  10. void Inder(int root){
  11. if(root > n) return;
  12. Inder(root * 2);
  13. CBT[root] = number[index++];
  14. Inder(root * 2 + 1);
  15. return;
  16. }
  17. int main(){
  18. scanf("%d",&n);
  19. for(int i = 0; i < n; i++){
  20. scanf("%d",&number[i]);
  21. }
  22. sort(number, number + n);
  23. Inder(1);
  24. for(int i = 1; i <= n; i++){
  25. printf("%d",CBT[i]);
  26. if(i != n) printf(" ");
  27. }
  28. }