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个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...
随机推荐
- 林大妈的JavaScript基础知识(三):JavaScript编程(2)函数
JavaScript是一门函数式的面向对象编程语言.了解函数将会是了解对象创建和操作.原型及原型方法.模块化编程等的重要基础.函数包含一组语句,它的主要功能是代码复用.隐藏信息和组合调用.我们编程就是 ...
- Java连载10-数据类型取值范围&转义字符
一.数据类型取值范围 二.八种数据类型在成员变量中的默认值 (1)成员变量,没有赋值,编译不会报错,系统会自动给赋值 byte\int\short\long默认值为0:float\double默认值为 ...
- Netty源码解析—客户端启动
Netty源码解析-客户端启动 Bootstrap示例 public final class EchoClient { static final boolean SSL = System.getPro ...
- 转载:MyBatis mapper.xml中使用静态常量或者静态方法
转自:https://my.oschina.net/wtslh/blog/682704 今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的 ...
- c#图片的平移与旋转
1新建文件夹,添加一个图片 2 添加控件 两个button控件 一个image控件 一个Canvas控件 3 代码实现 using System;using System.Collections.Ge ...
- Hyper-V虚拟机上安装Ubuntu16.04/Ubuntu18.04.2LTS,搭建GitLab
我的电脑系统是win10,内存8g如下 一开始是装的Ubuntu18.04.2LTS, gitlab-ce_12.1.3-ce.0_amd64.deb,每次能够安装成功,但是修改完ip后,运行gitl ...
- 初试kafka消息队列中间件二(采用java代码收发消息)
初试kafka消息队列中间件二(采用java代码收发消息) 上一篇 初试kafka消息队列中间件一 今天的案例主要是将采用命令行收发信息改成使用java代码实现,根据上一篇的接着写: 先启动Zooke ...
- CodeForces 938E Max History 题解
参考自:https://blog.csdn.net/dreaming__ldx/article/details/84976834 https://blog.csdn.net/acterminate/a ...
- java学习中碰到的疑惑和解答(一)
今天写一个接口的时候发现,接口的方法不需要写修饰符,直接写数据类型加上方法名(参数)即可通过编译. import java.util.List; import com.bjm.pojo.Flower; ...
- golang常用的http请求操作
之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的 ...