数组建 BST
#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5 + 10;
int N, root = 1;
int vis[maxn], dep[maxn];
vector<int> pre;
vector<int> lev[maxn];
int depth = -1; struct Node{
int val;
int l;
int r;
}node[maxn]; void order(int root) {
if(!root) return; if(node[root].l != -1) order(node[root].l);
if(node[root].r != -1) order(node[root].r);
pre.push_back(node[root].val);
} void levelorder(int root) {
if(!root) return;
queue<int> q;
q.push(root);
dep[root] = 1;
while(!q.empty()) {
int t = q.front();
q.pop(); lev[dep[t]].push_back(node[t].val);
if(node[t].l != -1) q.push(node[t].l), dep[node[t].l] = dep[t] + 1, depth = max(depth, dep[node[t].l]);
if(node[t].r != -1) q.push(node[t].r), dep[node[t].r] = dep[t] + 1, depth = max(depth, dep[node[t].r]);
}
} int main() {
scanf("%d", &N);
memset(vis, 0, sizeof(vis));
memset(dep, 0, sizeof(dep));
for(int i = 1; i <= N; i ++) {
scanf("%d%d%d", &node[i].val, &node[i].l, &node[i].r);
if(node[i].l != -1) vis[node[i].l] = 1;
if(node[i].r != -1) vis[node[i].r] = 1;
} while(vis[root]) root ++; levelorder(root);
//printf("%d\n", depth); for(int i = 1; i <= depth; i ++) {
if(i % 2 == 0) {
for(int j = lev[i].size() - 1; j >= 0; j --)
printf("%d ", lev[i][j]);
} else {
for(int j = 0; j < lev[i].size(); j ++)
printf("%d ", lev[i][j]);
}
//printf("%d\n", lev[i].size());
}
//for(int i = 0; i < lev.size(); i ++)
//printf("%d%s", lev[i], i != lev.size() - 1 ? " " : "\n"); return 0;
}
----------------------------------------------------
#include <bits/stdc++.h>
using namespace std; int N, root = 0;
int a[110]; struct Node{
int val;
int l = -1;
int r = -1;
int fa = -1;
int lev = 0;
}node[110]; void BuildBST(int root, int x) {
if(node[root].val > node[x].val) {
if(node[root].l == -1) {
node[root].l = x;
node[x].fa = root;
node[x].lev = node[root].lev + 1;
} else BuildBST(node[root].l, x);
} else if(node[root].val <= node[x].val) {
if(node[root].r == -1) {
node[root].r = x;
node[x].fa = root;
node[x].lev = node[root].lev + 1;
} else BuildBST(node[root].r, x);
}
} int main() {
scanf("%d", &N);
for(int i = 0; i < N; i ++) {
int x;
scanf("%d", &x);
node[i].val = x;
} for(int i = 1; i < N; i ++)
BuildBST(root, i); for(int i = 0; i < N; i ++)
printf("%d %d %d %d %d\n", node[i].val, node[i].l, node[i].r, node[i].fa, node[i].lev); return 0;
}
数组建 BST的更多相关文章
- 浅析BST二叉搜索树
2020-3-25 update: 原洛谷日报#2中代码部分出现一些问题,详情见此帖.并略微修改本文一些描述,使得语言更加自然. 2020-4-9 update:修了一些代码的锅,并且将文章同步发表于 ...
- PAT甲级:1064 Complete Binary Search Tree (30分)
PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...
- Splay树再学习
队友最近可能在学Splay,然后让我敲下HDU1754的题,其实是很裸的一个线段树,不过用下Splay也无妨,他说他双旋超时,单旋过了,所以我就敲来看下.但是之前写的那个Splay越发的觉得不能看,所 ...
- 排序算法FOUR:堆排序HeapSort
/** *堆排序思路:O(nlogn) * 用最大堆,传入一个数组,先用数组建堆,维护堆的性质 * 再把第一个数与堆最后一个数调换,因为第一个数是最大的 * 把堆的大小减小一 * 再 在堆的大小上维护 ...
- bzoj 泛做
3003 这个题是这样的,对序列差分后,每个取反操作就是给两个端点的值取反,然后背包之后再状压就好了 4128 这题棒棒的QAQBSGS 23333 4176 这个杜教筛呃呃呃大爷链接 3028 我要 ...
- L2-025. 分而治之
分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题就请你编写程序,判断每个方案的可行性 ...
- luogu P3369 【模板】普通平衡树(splay)
嘟嘟嘟 突然觉得splay挺有意思,唯一不足的是这几天是一天一道,debug到崩溃. 做了几道平衡树基础题后,对这题有莫名的自信,还算愉快的敲完了代码后,发现样例都过不去,然后就陷入了无限的debug ...
- 一道经典的面试题:如何从N个数中选出最大(小)的n个数
转载:https://zhidao.baidu.com/question/1893908497885440140.html 这个问题我前前后后考虑了有快一年了,也和不少人讨论过.据我得到的消息,Goo ...
- 【poj1743】Musical Theme 【后缀自动机】
题意 给出一个n个数字的序列,找出相同变化趋势且不重叠的两个最长子串. 分析 这个题以前应该用后缀数组+二分做过.学了后缀自动机后可以用后缀自动机搞一下. 先差分,然后把查分后的数组建SAM.然后对于 ...
随机推荐
- 将含有makefile文件的源码加入Eclipse工程
转载自https://www.linuxidc.com/Linux/2011-02/32763.htm 很多软件在开发或者分析时需要一个像样的IDE,Eclipse是其中很优秀的一个,至少个人感觉很好 ...
- Leancloud+Valine打造Hexo个人博客极简评论系统
以下配置是基于Next主题6.1.0版本 效果见个人博客的最下方评论. Leancloud配置 首先访问Leancloud官网https://leancloud.cn/ 有Github账号的小伙伴可以 ...
- Spring的jdbc模板1
Spring是EE开发的一站式框架,有EE开发的每一层解决方案.Spring对持久层也提供了解决方案:ORM模块和jdbc模块,ORM模块在整合其他框架的时候使用 Spring提供了很多的模板用于简化 ...
- RMQ 字符串 F. Strings and Queries
F. Strings and Queries time limit per test 2.5 s memory limit per test 256 MB input standard input o ...
- content-box和border-box
理解box-sizing属性border-box,content-box,其实也是理解正常盒模型与异常盒模型. 如果不做特殊说明,我们日常所用的div都是正常盒子模型. 正常盒子模型 正常盒子模型,是 ...
- pandas 选择列或者添加列生成新的DataFrame
选择某些列 import pandas as pd # 从Excel中读取数据,生成DataFrame数据 # 导入Excel路径和sheet name df = pd.read_excel(exce ...
- docker 6 docker运行的底层原理
docker是一个client-server结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器,是一个运行时的环境,就 ...
- 【Codeforces 339】Xenia and Bit Operations
Codeforces 339 D 题意:给定\(2^n\)个数字,现在把它们进行如下操作: 相邻的两个数取\(or\) 相邻的两个数取\(xor\) 以此类推,直到剩下一个数. 问每次修改一个数字, ...
- D. Artsem and Saunders
一个变换题 给定f(x),[1,n]->[1,n] 构造g(x),h(x)满足: g(h(x))=x [1,n]->[1,m] h(g(x))=f(x) [1,m]->[1,n] 根 ...
- face recognition[MobileFaceNet]
本文来自<MobileFaceNets: Efficient CNNs for Accurate Real-Time Face Verification on Mobile Devices> ...