nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板
参考博客:https://blog.csdn.net/stpeace/article/details/9067029
参考博客:https://blog.csdn.net/baidu_35643793/article/details/70792326
先放上二叉搜索树的板子
#include <iostream>
using namespace std;
// BST的结点
typedef struct node
{
int key;
struct node *lChild, *rChild;
}Node, *BST;
// 在给定的BST中插入结点,其数据域为element, 使之称为新的BST
bool BSTInsert(Node * &p, int element)
{
if(NULL == p) // 空树
{
p = new Node;
p->key = element;
p->lChild = p->rChild = NULL;
return true;
}
if(element == p->key) // BST中不能有相等的值
return false;
if(element < p->key) // 递归
return BSTInsert(p->lChild, element);
return BSTInsert(p->rChild, element); // 递归
}
// 建立BST
void createBST(Node * &T, int a[], int n)
{
T = NULL;
int i;
for(i = 0; i < n; i++)
{
BSTInsert(T, a[i]);
}
}
// 先序遍历
void preOrderTraverse(BST T)
{
if(T)
{
cout << T->key << " ";
preOrderTraverse(T->lChild);
preOrderTraverse(T->rChild);
}
}
// 中序遍历
void inOrderTraverse(BST T)
{
if(T)
{
inOrderTraverse(T->lChild);
cout << T->key << " ";
inOrderTraverse(T->rChild);
}
}
int main()
{
int a[10] = {4, 5, 2, 1, 0, 9, 3, 7, 6, 8};
int n = 10;
BST T;
// 并非所有的a[]都能构造出BST,所以,最好对createBST的返回值进行判断
createBST(T, a, n);
preOrderTraverse(T);
cout << endl;
inOrderTraverse(T);
cout << endl;
return 0;
}
nyoj 1278
这道题 题意就是 判断二叉排序树的形状有多少个不一样。
首先 建树 就用上面的板子。
然后就是 判断形状:只需要各个位置是否对应一致有值就行了(如果一颗树在这个地方是空的,那么另一颗树要想与它形状相同,这个地方也必须是空的)
//BST二叉搜索树;
#include<cstdio>
#include<iostream>
using namespace std;
int flag;
typedef struct Node
{
int key;
struct Node *lChild,*rChild;
} Node,*BST;
bool BSTInsert(Node * &p,int element)
{
if(p==NULL)
{
p=new Node;
p->key=element;
p->lChild=p->rChild=NULL;
return true;
}
if(element==p->key)
return false;
if(element<p->key)
return BSTInsert(p->lChild,element);
return BSTInsert(p->rChild,element);
}
void judge(BST T1,BST T2) //判断形状;
{
if(T1==NULL&&T2==NULL)
return;
else if(T1&&T2)
{
judge(T1->lChild,T2->lChild);
judge(T1->rChild,T2->rChild);
}
else
flag=0;
}
int main()
{
int t,n,k,x;
BST tree[55];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(int i=0; i<n; i++)
{
BST T=NULL;
for(int j=0; j<k; j++) //建树;
{
scanf("%d",&x);
BSTInsert(T,x);
}
tree[i]=T;
}
//找形状种类数;
int ans=0;
for(int i=0; i<n; i++)
{
int flog=1;
for(int j=i+1; j<n; j++)
{
flag=1;
judge(tree[i],tree[j]);
if(flag)
{
flog=0;
break;
}
}
if(flog)
++ans;
}
printf("%d\n",ans);
}
return 0;
}
nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板的更多相关文章
- Prototypes analyze(二叉排序树,不同树形个数)
Prototypes analyze 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ALpha Ceiling Manufacturers (ACM) is ana ...
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- 数据结构图文解析之:树的简介及二叉排序树C++模板实现.
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- 二叉排序树(BST)构造与应用
二叉排序树(BST)构造与应用 本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社. 本博文作为学习资料整理. 源码是VC+ ...
- nyoj-1278-Prototypes analyze(二叉排序树模板)
题目链接 思路:建树之后,判断有多少种不同的树. 判断不同的树,简单的思路是遍历数组,判断数组后面是否存在一样的树 /* Name:NYOJ-1278-Prototypes analyze Copyr ...
- 哈夫曼树;二叉树;二叉排序树(BST)
优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...
- 二叉查找树BST 模板
二叉查找树BST 就是二叉搜索树 二叉排序树. 就是满足 左儿子<父节点<右儿子 的一颗树,插入和查询复杂度最好情况都是logN的,写起来很简单. 根据BST的性质可以很好的解决这些东 ...
- 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较
二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』 二分法的存储要求:要求顺序存储,以便于根据下标随机访问 二分法的时间效率:O(Log(n)) 二分 ...
- 二叉排序树BST代码(JAVA)
publicclassTest{ publicstaticvoid main(String[] args){ int[] r =newint[]{5,1,3,4,6,7 ...
随机推荐
- win10,anconda, python3.6安装dlib19.17
目的和经验: 几个月前在笔记本上安过一次,按着教程用cmake编译其实也蛮简单的,不过当初忘了收藏了.现在换了台机子需要重新安装一遍,奈何之前的帖子找不到了. pypi 网站上有19.8.whl,如果 ...
- vbs实现c++的vector
代码(待更新): class Vector Private length Private data() Sub Class_Initialize() length= End Sub '插入元素' pu ...
- 《计算机网络第7版》PDF+《计算机网络释疑与习题解答第7版》PDF
谢希仁 链接:https://pan.baidu.com/s/1_sM9bFL0y3S1NXBz5rLyvg 提取码:po3i 计算机网络(第7版)谢希仁 · 语雀 https://www.yuque ...
- MySQL实战45讲学习笔记:第三十二讲
一.本节分析案例 在 MySQL 中有两个 kill 命令:一个是 kill query + 线程 id,表示终止这个线程中正在执行的语句:一个是 kill connection + 线程 id,这里 ...
- Token认证,如何快速方便获取用户信息
背景 我们有一个Web项目,这个项目提供了很多的Rest API.也做了权限控制,访问API的请求必须要带上事先认证后获取的Token才可以. 认证的话就在Filter中进行的,会获取请求的Token ...
- 全国省市区 json sql 支付宝 2019年9月29日
数据来源: https://docs.alipay.com/isv/10327 链接:https://pan.baidu.com/s/14cQCRzU6QxAvknDrQfhyUA 提取码:baaf ...
- (十八)golang--defer关键字
在函数中,程序员经常需要创建资源(比如,数据库连接,文件句柄,锁等),为了在函数执行完毕后,及时释放资源,go设计者提供defer(延时机制) 用defer申明的语句不会立即执行,而是被存入到defe ...
- HTTPS 相关问题
什么是 HTTPS? HTTPS,是指超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种在 HTTP 协议基础上进行传输加密的安全协议,能够有效保障数据 ...
- Python 下载图片的三种方法
import os os.makedirs('./image/', exist_ok=True) IMAGE_URL = "http://image.nationalgeographic.c ...
- C++:Name Lookup & Best Match
名字查找 每当一个变量或者一个对象出现,编译器都会进行名字查找(name lookup),以确认这个变量或对象的具体属性.一般情况下,程序会从变量出现的地方开始向上查找,由内向外查找各级作用域直到全局 ...