分析:

  考察BST + 完全二叉树的性质,注意:

    (1):先用排序排好,然后由于是完全二叉树,我们使用中序来建树。

    (2):建好之后,层次遍历可以采用队列。

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <vector>
  6. #include <queue>
  7. #include <cmath>
  8.  
  9. using namespace std;
  10.  
  11. vector<int> vect;
  12. vector<int> result;
  13.  
  14. struct Node
  15. {
  16. int value;
  17. Node *left;
  18. Node *right;
  19. }*root;
  20.  
  21. Node *In(int level, int ll, int rr)
  22. {
  23. if (ll > rr) return NULL;
  24. int up_level = pow(, (level - )) - ; //除最后一层外 总共有多少个
  25. int Last_level_left = (rr - ll) + - up_level; //最后一层剩下的
  26.  
  27. int k = pow(, (level - ) - ); //最后一层是否布满了左分支
  28.  
  29. int left_left;
  30. if (Last_level_left >= k) left_left = up_level;
  31. else left_left = pow(, (level - )) - + Last_level_left;
  32.  
  33. Node *p = new Node();
  34. p->value = vect[left_left + ll];
  35.  
  36. p->left = In(level - , ll, ll + left_left - );
  37. p->right = In(level - , ll + left_left + , rr);
  38.  
  39. return p;
  40. }
  41.  
  42. void level_order(Node *root)
  43. {
  44. queue<Node *> q;
  45. q.push(root);
  46.  
  47. while (!q.empty())
  48. {
  49. Node *p = q.front();
  50. q.pop();
  51.  
  52. result.push_back(p->value);
  53.  
  54. if (p->left != NULL)
  55. q.push(p->left);
  56. if (p->right != NULL)
  57. q.push(p->right);
  58. }
  59.  
  60. printf("%d", result[]);
  61. for (int i = ; i < result.size(); i++)
  62. printf(" %d", result[i]);
  63. printf("\n");
  64. }
  65.  
  66. int main()
  67. {
  68. int n;
  69.  
  70. while (cin >> n)
  71. {
  72. vect.clear();
  73. result.clear();
  74. for (int i = ; i < n; i++)
  75. {
  76. int k;
  77. cin >> k;
  78. vect.push_back(k);
  79. }
  80. sort(vect.begin(), vect.end());
  81.  
  82. int level = log2(n) + ;
  83.  
  84. root = In(level, , n - );
  85. level_order(root);
  86.  
  87. }
  88. return ;
  89. }

1064. Complete Binary Search Tree (30)的更多相关文章

  1. PAT题库-1064. Complete Binary Search Tree (30)

    1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  2. pat 甲级 1064. Complete Binary Search Tree (30)

    1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  3. 1064. Complete Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise

    题目信息 1064. Complete Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tr ...

  4. PAT 甲级 1064 Complete Binary Search Tree (30 分)(不会做,重点复习,模拟中序遍历)

    1064 Complete Binary Search Tree (30 分)   A Binary Search Tree (BST) is recursively defined as a bin ...

  5. PAT甲级:1064 Complete Binary Search Tree (30分)

    PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...

  6. PAT Advanced 1064 Complete Binary Search Tree (30) [⼆叉查找树BST]

    题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...

  7. 1064 Complete Binary Search Tree (30分)(已知中序输出层序遍历)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  8. 【PAT甲级】1064 Complete Binary Search Tree (30 分)

    题意:输入一个正整数N(<=1000),接着输入N个非负整数(<=2000),输出完全二叉树的层次遍历. AAAAAccepted code: #define HAVE_STRUCT_TI ...

  9. PAT (Advanced Level) 1064. Complete Binary Search Tree (30)

    因为是要构造完全二叉树,所以树的形状已经确定了. 因此只要递归确定每个节点是多少即可. #include<cstdio> #include<cstring> #include& ...

随机推荐

  1. C++11:POD数据类型

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 啥是POD类型? POD全称Plain Old Data.通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是 ...

  2. Bootstrap整体架构

    大多数Bootstrap的使用者都认为Bootstrap只是提供了CSS组件和JavaScript插件,其实CSS组件和JavaScript插件只是Bootstrap框架的表现形式而已,他们都是构建在 ...

  3. 整理: Android HAL

    这篇文章整理来自http://bbs.chinaunix.net/thread-3675980-1-1.html 在论坛中看到的Android HAL讨论,有个ID描述的比较清楚,摘录如下: temp ...

  4. 【转】windows7 修改环境变量 和 用不用重启电脑的讨论

      原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html   先到我的电脑>属性>高级>环境变量 ...

  5. 65. Reverse Integer && Palindrome Number

    Reverse Integer Reverse digits of an integer. Example1: x =  123, return  321 Example2: x = -123, re ...

  6. Android:去掉默认的标题bar

    要使用自己定义的bar,只需要在layout文件中添加:<include layout="@layout/actionbar" />;当然你需要新建一个actionba ...

  7. MySQL绿色版5.7以上安装教程

    写在前面:5.7增加了安全性,默认root密码不在为空,而是初始化时随机生成一个root密码,改root密码的方式也不一样了 下载地址 http://dev.mysql.com/downloads/m ...

  8. Windows:文件服务器,访问进去不能查看到完整的文件

    文件服务器,访问进去不能查看到完整的文件:别人访问却可以查看到完整的所有文件 可能是登录的帐号串掉导致,删除文件服务器帐号,重新访问: cmd: net use /delete *

  9. 字符串str功能介绍

    1.name.__contains__ 包含 name1='eric'result = name.__contains__(er)   #name是否包含er,包含返回true,不包含返回fals p ...

  10. 解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid

    重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr ...