数组建 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.然后对于 ...
随机推荐
- Vue学习之路4-v-bind指令
1. 定义 1.1 v-bind 指令被用来响应地更新 HTML 属性,其实它是支持一个单一 JavaScript 表达式 (v-for 除外). 2. 语法 2.1 完整语法:<span v- ...
- June 1. 2018 Week 22nd Friday
What makes life dreary is the want of motive. 没有了目的,生活便暗淡无光. We all have dreams about our future, we ...
- iOS弹出UIViewController小视图
在TestViewController1中弹出TestViewController2 在TestViewController中点击按钮或者什么触发方法里面写入以下代码 TestViewControll ...
- Cesium实现键盘控制镜头效果
w-前进 a-左转 d-右转 s-后退 q-上仰 鼠标左键按住左右移动更换角度 html代码如下: <div id="cesiumContainer" style= ...
- jq stop()和:is(":animated")用法区别
stop(true,true): 表示停止匹配元素正在进行的动画并跳转到末状态,清空未执行完的动画队列.常用于”解决光标移入移出得过快导致的动画效果与光标动作不一致“问题! jQuery stop() ...
- UVA12545-Bits Equalizer(思维)
Problem UVA12545-Bits Equalizer Accept: 821 Submit: 4548Time Limit: 3000 mSec Problem Description I ...
- oracle(环境搭建一)
图形化安装Oracle11gR2 环境: verify: CentOS release 6.5 (Final) release:CentOS release 6.7 (Final) 1.登录到root ...
- Luogu5221 Product
Luogu5221 Product 求 \(\displaystyle\prod_{i=1}^n\prod_{j=1}^n{\frac{\operatorname{lcm}(i,\ j)}{\gcd( ...
- Java技术——Java中的static关键字解析
)非静态内部类能够访问外部类的静态和非静态成员,显然一个非静态内部类不能脱离外部类实体被创建,而静态类不能访问外部类的非静态成员,它只能访问外部类的静态成员.这一点和上面static方法的性质类似. ...
- Vscode更新之后rg.exe占用cpu过高
文件->首选项->搜索"search.followSymlinks"改为false https://www.zhihu.com/question/67317040