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 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云方》与方块来次消除大战!
最新文章
- Dom4jUtils.java
- mysql分组函数
- Android Studio tips1
- C4.5(决策树)
- Safari 下用 ";location.href = filePath"; 实现下载功能的诡异 bug
- Sublime Text3
- Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)
- 深入理解JS异步编程(一)
- java笔记--查看和修改线程的优先级
- INPC &; RaizePropertyChanged in mvvmlight
- Windows多线程同步系列之一-----互斥对象
- Sublime Text 快捷键--持续更新
- 腾讯开源的Paxos库PhxPaxos代码解读---Prepare阶段(一)
- J - Abbott&#39;s Revenge 搜索 寒假训练
- 查询部门----返回给前台TreeView数据格式的数据
- Hive日志(Hive Logging)--hive GettingStarted翻译
- Vue小案例 之 商品管理------删除商品与提示
- python3版本main.py执行产生中间__pycache__详解
- Window.sessionStorage
- asp.net接收传入的数据流
热门文章
- context switch
- Java真实笔试题一
- 真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法
- Configure a proxy for your API calls with Angular CLI
- Extjs选中多行Grid提交
- css--小白入门篇4
- [Luogu] P3701 「伪模板」主席树
- Linux---文件目录管理
- Ztree加载完成默认选中根节点右侧生成表格
- linux strings-在对象文件或二进制文件中查找可打印的字符串