hihocoder #1616 : 是二叉搜索树吗?(模拟题)
题目链接:http://hihocoder.com/problemset/problem/1616
题解:就是简单的模拟一下至于如何判断是不是二叉搜索树可以通过中序遍历将每个点存下来看是不是递增的如果是递增的就是反之不是
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int M = 1e4 + ;
vector<int> vc[M];
int fa[M] , ch[M][] , f[M] , n , emmm , num[M];
void init() {
for(int i = ; i <= n ; i++) {
f[i] = i;
vc[i].clear();
}
}
int find(int x) {
if(x == f[x]) return f[x];
return f[x] = find(f[x]);
}
int cnt;
void cau(int u) {
int len = vc[u].size();
if(len == ) {
if(vc[u][] == vc[u][] || vc[u][] == u || vc[u][] == u) emmm = ;
cau(vc[u][]);
num[cnt++] = u;
cau(vc[u][]);
}
if(len == ) {
if(vc[u][] == u) emmm = ;
if(vc[u][] > u) {
num[cnt++] = u;
cau(vc[u][]);
}
else {
cau(vc[u][]);
num[cnt++] = u;
}
}
if(len == ) {
num[cnt++] = u;
}
}
void dfs(int u) {
int len = vc[u].size();
if(len == ) {
if(u > vc[u][]) {
putchar('(');
printf("%d" , vc[u][]);
dfs(vc[u][]);
putchar(')');
putchar('(');
putchar(')');
}
else {
putchar('(');
putchar(')');
putchar('(');
printf("%d" , vc[u][]);
dfs(vc[u][]);
putchar(')');
}
}
if(len == ) {
putchar('(');
printf("%d" , vc[u][]);
dfs(vc[u][]);
putchar(')');
putchar('(');
printf("%d" , vc[u][]);
dfs(vc[u][]);
putchar(')');
}
if(len == ) {
putchar('(');
putchar(')');
putchar('(');
putchar(')');
}
}
int main() {
int t;
scanf("%d" , &t);
while(t--) {
cnt = ;
scanf("%d" , &n);
memset(fa , - , sizeof(fa));
int flag = ;
init();
for(int i = ; i <= n - ; i++) {
int u , v;
scanf("%d%d" , &u , &v);
vc[u].push_back(v);
int a = find(u) , b = find(v);
if(a == b) {
flag = ;
}
else {
f[b] = a;
}
if(fa[v] == -) {
fa[v] = u;
continue;
}
else {
flag = ;
}
}
if(flag) {
printf("ERROR1\n");
}
else {
int tmp = ;
for(int i = ; i <= n ; i++) {
if(vc[i].size() == ) continue;
sort(vc[i].begin() , vc[i].end());
if(vc[i].size() > ) {
tmp = ;
break;
}
}
if(tmp) {
printf("ERROR2\n");
}
else {
emmm = ;
int root = ;
for(int i = ; i <= n ; i++) {
if(fa[i] == -) {
root = i;
break;
}
}
cau(root);
for(int i = ; i < cnt ; i++) {
if(num[i] <= num[i - ]) {
emmm = ;
break;
}
}
if(emmm) {
printf("ERROR3\n");
}
else {
putchar('(');
printf("%d" , root);
dfs(root);
putchar(')');
puts("");
}
} }
}
return ;
}
hihocoder #1616 : 是二叉搜索树吗?(模拟题)的更多相关文章
- [LeetCode] Convert Binary Search Tree to Sorted Doubly Linked List 将二叉搜索树转为有序双向链表
Convert a BST to a sorted circular doubly-linked list in-place. Think of the left and right pointers ...
- LeetCode OJ:Convert Sorted Array to Binary Search Tree(将排序好的数组转换成二叉搜索树)
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 讲一 ...
- 108 Convert Sorted Array to Binary Search Tree 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树.此题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1.示例:给定有序数组: [-10,-3,0,5,9], ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...
- csps模拟93序列,二叉搜索树,走路题解
题面: 模拟93考得并不理想,二维偏序没看出来,然而看出来了也不会打 序列: 对a,b数列求前缀和,那么题意转化为了满足$suma[i]>=suma[j]$且$sumb[i]>=sumb[ ...
- 二叉搜索树的两种实现(数组模拟,STL)
书上实现: 二叉搜索数的特点:高效实现 插入一个数值,查询是否包含某个数值,删除某一个数值. 所有的节点都满足左子树上的所有节点都比自己的小,而右子树上的所有节点都比自己大的特点. 查询:如果当前数值 ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根 ...
- [CSP-S模拟测试]:二叉搜索树(DP+贪心)
题目传送门(内部题99) 输入格式 第一行一个整数$n$,第二行$n$个整数$x_1\sim x_n$. 输出格式 一行一个整数表示答案. 样例 样例输入: 58 2 1 4 3 样例输出: 数据范围 ...
- 天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟
题目分析: 本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...
随机推荐
- LDAP 服务搭建和后期管理
LDAP 服务 本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路劲,这里需要自行修改. LDAP 服务按照个人理解,也可使理解为一个数据库,但是这个数据库的读写性能不像 M ...
- CentOS 7服务器安装brook和bbr加速
一.安装Brook 执行一键部署脚本 $ wget -N --no-check-certificate wget -N --no-check-certificate https://raw.githu ...
- 消息中间件-activemq实战之整合Spring(四)
前面的理论准备已经很充分,这一节我们来实战:将activemq整合到Spring框架才行中,因为Spring已经集成了JMS,这也为我们配置activermq带来了方便. 1. Spring对jms的 ...
- egg-sequelize-ts 插件
egg-sequelize-ts plugin 目的 (Purpose) 能让使用 typescript 编写的 egg.js 项目中能够使用 sequelize方法,并同时得到egg.js所赋予的功 ...
- (二)对象以及变量的并发访问--synchronized的使用细节,用法
具体的记录synchronized关键的各种使用方式,注意事项.感觉一步一步跟我来都可以看懂滴 大致是按照以下思路进行书写的.黑体字可以理解为结论, 1.synchronized锁的是什么? 2.sy ...
- 测试自动化:java+selenium3 UI自动化(2) - 启动Firefox
1. selenium和浏览器 基于selenium的这套自动化体系,其实现关键就在于对于各浏览器的顺畅操作. 事实上当selenium刚开始起家的时候,他使用的还是javascript注入的方式来驱 ...
- DataPipeline丨DataOps的组织架构与挑战
作者:DataPipeline CEO 陈诚 前两周,我们分别探讨了“数据的资产负债表与现状”及“DataOps理念与设计原则”.接下来,本文会在前两篇文章的基础上继续探讨由DataOps设计原则衍生 ...
- 构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)
背景 相较传统的重量级OLAP数据仓库,“数据湖”以其数据体量大.综合成本低.支持非结构化数据.查询灵活多变等特点,受到越来越多企业的青睐,逐渐成为了现代数据平台的核心和架构范式. 数据湖的核心功能, ...
- windows下用GCC编译DLL
此程序有3个文件,分别为 export.h .export.c .main.c export.h 文件内容 /*此头很有必要,别人在调用的时候知道有哪些方法*/ #ifdef BUILD_DLL #d ...
- C#读取Txt大数据并更新到数据库
环境 Sqlserver 2016 .net 4.5.2 目前测试数据1300万 大约3-4分钟.(限制一次读取条数 和 线程数是 要节省服务器资源,如果调太大服务器其它应用可能就跑不了了), Sql ...