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个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...
随机推荐
- 【iOS】the executable was signed with invalid entitlements
又遇到了这个问题,貌似之前遇到过,如图所示: 原因:开发证书里没添加手机. PS: Xcode7 除外,据说已经不需要证书了,这里用的是 6.4
- 【iOS】UIAlertView 点击跳转事件
iOS 开发中,UIAlertView 经常用到.这里记录下曾用到的点击跳转事件. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@& ...
- Restful API 中的错误处理
简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API. Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结 ...
- X-Admin&ABP框架开发-系统日志
网站正常运行中有时出现异常在所难免,查看系统运行日志分析问题并能够根据错误信息快速解决问题尤为重要,ABP对于系统运行日志这块已经做了很好的处理,默认采用的Log4Net已经足够满足开发过程中的需要了 ...
- .net core(c#)拟合圆测试
说明 很多时候,我们需要运动物体的转弯半径去描述其机器性能.但在大多数的现实条件下,我们只能够获取到运动物体的 GPS 位置点集,并不能直接得到转弯半径或者圆心位置.为此,我们可以利用拟合圆的方式得到 ...
- DesignPattern系列__03依赖倒置原则
依赖倒置原则(Dependence Inversion Priiciple,DIP) 介绍 High level modules should not depend upon low level mo ...
- 手把手教你grid布局
概述 目前css布局方案中,网格布局可以算得上是最强大的布局方案了.它可以将网页分为一个个网格,然后利用这些网格组合做出各种各样的布局. 基本概念 在学习grid布局之前,我们需要了解一些基本概念 1 ...
- 七牛云qshell工具定时备份空间文件到本地
qshell 是利用七牛文档上公开的 API实现的一个方便开发者测试和使用七牛API服务的命令行工具,使用该工具可以实现很多的功能,今天就分享一下利用qshell定时备份空间文件到本地 1.下载qsh ...
- 【Java例题】2.6 三角形的面积
6. 用海伦公式计算三角形的面积. 设边长分别时a,b和c,s=(a+b+c)/2, 则三角形面积area=sqrt(s*(s-a)*(s-b)*(s-c)). package study; impo ...
- Mysql索引进阶入门
1. 索引操作 MySQL 索引 菜鸟 2. 索引类型 PRIMARY 唯一且不能为空:一张表只能有一个主键索引 INDEX 普通索引 UNIQUE 唯一性索引 FULLTEXT 全文索引:用于搜索很 ...