题目信息

1064. Complete Binary Search Tree (30)

时间限制100 ms

内存限制65536 kB

代码长度限制16000 B

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

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node’s key.
  • Both the left and right subtrees must also be binary search trees.

A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.

Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (<=1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.

Sample Input:

10

1 2 3 4 5 6 7 8 9 0

Sample Output:

6 3 8 1 5 7 9 0 2 4

解题思路

模拟建树推出层序

AC代码

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n, a[1005];
vector<int> level[22];
void step(int loc, int len, int lv){
if (len <= 0) return;
int t = 1;
while (t*2 <= len) t *= 2;
--t;
int cd = ((len - (len - t)) + 1) / 2 + len - t; if (cd <= t + 1){
level[lv].push_back(a[loc + cd - 1]);
step(loc, cd - 1, lv + 1);
step(loc + cd, len - cd, lv + 1);
}else{
level[lv].push_back(a[loc + t]);
step(loc, t, lv + 1);
step(loc + t + 1, len - t - 1, lv + 1);
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; ++i){
scanf("%d", a+i);
}
sort(a, a + n);
step(0, n, 0);
printf("%d", level[0][0]);
for (int i = 1; i <= 13; ++i){
for (int j = 0; j < level[i].size(); ++j){
printf(" %d", level[i][j]);
}
}
printf("\n");
}

个人游戏推广:

apkName=com.xianyun.yf" target="_blank" align="left">

apkName=com.xianyun.yf" target="_blank" align="left">《10云方》与方块来次消除大战!

最新文章

  1. Dom4jUtils.java
  2. mysql分组函数
  3. Android Studio tips1
  4. C4.5(决策树)
  5. Safari 下用 &quot;location.href = filePath&quot; 实现下载功能的诡异 bug
  6. Sublime Text3
  7. Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)
  8. 深入理解JS异步编程(一)
  9. java笔记--查看和修改线程的优先级
  10. INPC &amp; RaizePropertyChanged in mvvmlight
  11. Windows多线程同步系列之一-----互斥对象
  12. Sublime Text 快捷键--持续更新
  13. 腾讯开源的Paxos库PhxPaxos代码解读---Prepare阶段(一)
  14. J - Abbott&#39;s Revenge 搜索 寒假训练
  15. 查询部门----返回给前台TreeView数据格式的数据
  16. Hive日志(Hive Logging)--hive GettingStarted翻译
  17. Vue小案例 之 商品管理------删除商品与提示
  18. python3版本main.py执行产生中间__pycache__详解
  19. Window.sessionStorage
  20. asp.net接收传入的数据流

热门文章

  1. context switch
  2. Java真实笔试题一
  3. 真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法
  4. Configure a proxy for your API calls with Angular CLI
  5. Extjs选中多行Grid提交
  6. css--小白入门篇4
  7. [Luogu] P3701 「伪模板」主席树
  8. Linux---文件目录管理
  9. Ztree加载完成默认选中根节点右侧生成表格
  10. linux strings-在对象文件或二进制文件中查找可打印的字符串