PAT 1064 Complete Binary Search Tree
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm> using namespace std; class Node {
public:
int val;
Node* left;
Node* right;
public:
Node(): val(), left(NULL), right(NULL) {}
Node(int _val, Node* _left = NULL, Node* _right = NULL): val(_val), left(_left), right(_right) {}
}; vector<Node*> build_next_level(vector<Node*> last_level, int &num) {
vector<Node*> res;
if (num < ) return res; for (auto iter = last_level.begin(); iter != last_level.end(); iter++) {
Node* parent = *iter; Node* lchild = new Node();
res.push_back(lchild);
parent->left = lchild;
if (--num < ) break; Node* rchild = new Node();
res.push_back(rchild);
parent->right= rchild;
if (--num < ) break;
} return res;
} void inorder_traverse(Node* root, int& order) {
if (root == NULL) return;
inorder_traverse(root->left, order);
root->val = order++;
inorder_traverse(root->right, order);
} int main() {
int cnt; scanf("%d", &cnt); vector<int> nums(cnt, ); if (cnt < ) return ; for (int i = ; i<cnt; i++) {
int num = ;
scanf("%d", &num);
nums[i] = num;
}
sort(nums.begin(), nums.end()); vector<vector<Node*> > levels; vector<Node*> last_level;
last_level.push_back(new Node()); levels.push_back(last_level); int node_cnt = cnt - ; // we already pushed the root node
while (node_cnt > ) {
vector<Node*> cur_level = build_next_level(last_level, node_cnt);
levels.push_back(cur_level);
swap(last_level, cur_level);
} int order = ;
inorder_traverse(levels[][], order); node_cnt = cnt; for (auto iter_levels = levels.begin(); iter_levels != levels.end(); iter_levels++) {
vector<Node*>& cur_level = *iter_levels;
for (auto iter = cur_level.begin(); iter != cur_level.end(); iter++) {
Node* node = *iter;
int val = nums[node->val];
if (--node_cnt > ) {
printf("%d ", val);
} else {
printf("%d\n", val); // last element
}
}
}
return ;
}
又是跟书本比较近的一题
PAT 1064 Complete Binary Search Tree的更多相关文章
- PAT 1064 Complete Binary Search Tree[二叉树][难]
1064 Complete Binary Search Tree (30)(30 分) A Binary Search Tree (BST) is recursively defined as a b ...
- PAT甲级:1064 Complete Binary Search Tree (30分)
PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...
- PAT题库-1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- pat 甲级 1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- 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 ...
- PAT 甲级 1064 Complete Binary Search Tree (30 分)(不会做,重点复习,模拟中序遍历)
1064 Complete Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a bin ...
- pat 甲级 1064 ( Complete Binary Search Tree ) (数据结构)
1064 Complete Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a binar ...
- PAT 甲级 1064 Complete Binary Search Tree
https://pintia.cn/problem-sets/994805342720868352/problems/994805407749357568 A Binary Search Tree ( ...
- 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 ...
随机推荐
- Python3之pickle模块
用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...
- SDUT OJ 顺序表应用2:多余元素删除之建表算法
顺序表应用2:多余元素删除之建表算法 Time Limit: 3 ms Memory Limit: 600 KiB Submit Statistic Discuss Problem Descripti ...
- input 和 select
var source = $('input[name="source"]:checked').val(); var completenum = $("#completen ...
- asp.net mvc 静态化
静态化的基本理解就是,常用的资源以文本形式保存,客户端访问时无需经过程序处理,直接下载 但是不存在的文件需要经过程序处理,文件内容如果需要有更动或删除,则直接删除文件本身 1.IIS Express ...
- rabbitmq 事务消息
事务消息主要用在发送方 在connection上加上事务属性, 发送方感知到本地事务执行失败, 需要通知broker将先前已经接收到的消息rollback,不要发给后面的消费者, 满足强一致性的要求 ...
- esper(4-3)-Non-Overlapping Context
语法 create context context_name start start_condition end end_condition 如: // 9点到17点此context才可用(以引擎的时 ...
- vue 的计算属性computed自我理解
类型:{ [key: string]: Function | { get: Function, set: Function } } 计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算.注意, ...
- cmake指令详解
所需文件名:CmakeLists.txt,在需要操作的每个目录下都需要 PROJECT(工程名字) 这条指令会自动创建两个变量: <projectname>_BINARY_DIR( ...
- Android报错
Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process. ...
- 【3dsMax安装失败,如何卸载、安装3dMax 2013?】
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...