数组建 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.然后对于 ...
随机推荐
- Windows 版本说明,Enterprise、Ultimate、Home、Professional知多少
关于Windows 的安装光盘版本很多种,很多人不知道选择哪些. Ultimate 旗舰版,VISTA开始有了这个级别,是最全最高级的,一般程序开发的电脑,玩游戏的电脑,建议用它,不过对配置稍有一些要 ...
- Linux系统将服务器时间与网络时间同步
遇到一种情景,就是多台服务器之间的时间并不是同步的,有的快有的慢,这时候就要用到网络时间了, 登陆到服务器上,输入命令date可以查询服务器的时间,需要同步的时候需要安装ntpdate; 1. 安装 ...
- 如何用Jupyter notebook打开本地数据集
首先打开本地Jupyter notebook,出现类似页面并进入网页端Home. 网页端界面类似如下: 需要注意的是,Jupyter notebook只能打开当前目录下的数据集,如csv,所以需要使用 ...
- python 约束与异常处理
一.类的约束 1.约束就是对类的约束.其实就是父类对子类进行约束,子类必须要写xxx方法. 2.抽象:就是当我们没法对一个功能或者一个属性进行精确的表述,一般都采用抽象的方式给出. (1)抽象类的书写 ...
- 常用Dockerfile举例
FROM ubuntu:14.04 MAINTAINER sss ENV JAVA_HOME /opt/jdk RUN \ echo 'export PATH=$JAVA_HOME/bin:$PATH ...
- JavaScript数组对象详情
Array 数组概述 Array 类型是 ECMAScript 最常用的类型.javaScript 中的 Array 类型和其他语言中的数组有着很大的区别. 虽然数组都是有序排列,但 javaScri ...
- 【CQOI2017】小Q的表格
[CQOI2017]小Q的表格 稍加推导就会发现\(f(a,b)=a\cdot b\cdot h(gcd(a,b))\). 初始时\(h(n)=1\). 询问前\(k\)行\(k\)列时我们就反演: ...
- Android中实现短信发送的一种方式
SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...
- HTTP请求报文解剖
转自:https://www.iteye.com/topic/1124408 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,GET和POST是最常 ...
- python入门学习:2.列表简介
python入门学习:2.列表简介 关键点:列表 2.1 列表是什么2.2 修改.添加和删除元素2.3 组织列表 2.1 列表是什么 列表,是由一系列按特定顺序排列的元素组成.你可以创建包含字母表 ...