nyoj-1278-Prototypes analyze(二叉排序树模板)
思路:建树之后,判断有多少种不同的树。
判断不同的树,简单的思路是遍历数组,判断数组后面是否存在一样的树
/*
Name:NYOJ-1278-Prototypes analyze
Copyright:
Author:
Date: 2018/4/14 19:19:03
Description:
二叉排序树模板
*/
#include<cstdio>
#include<iostream>
using namespace std; /*模板---------------------------------------------------------------*/
typedef int ElemType;//定义ElemType的类型,可自己更改
template<typename T>
int getArrayLength(T &array) {
return (sizeof(array) / sizeof(array[]));
}
//设计数据结构,构造二叉树
typedef struct node {
ElemType data;
struct node *lchild, *rchild;
}*BST;
//插入元素
bool insertBST(BST &T, ElemType element) {
if (T==NULL)
{
T = new node;
T->data = element;
T->lchild = T->rchild = NULL;
return true;
}
if (T->data==element) //元素的值不能和树中已有的值相等
{
return false;
}
if (element<T->data)
{
insertBST(T->lchild,element);
}
else
{
insertBST(T->rchild,element);
}
}
//创建二叉排序树
void createBST(BST &T,ElemType array[],int len){ //Debug模式下,未初始化的栈内存上的指针全部填成0xcccccccc;
T = NULL;
for (int i = ; i < len; i++)
{
insertBST(T,array[i]);
}
}
//访问,可改为数组保存
void visit(ElemType elem) {
cout << elem << " ";
}
//中序遍历
void preOrderTraverse(BST &T) {
if (T!=NULL)
{
preOrderTraverse(T->lchild);
visit(T->data);
preOrderTraverse(T->rchild);
}
}
//释放内存
void relese(BST &T) {
if (T==NULL)
{
return;
}
relese(T->lchild);
relese(T->rchild);
delete T;
}
//删除某个结点
bool deleteNode(BST &T, ElemType element) {
if (T==NULL)
{
return false;
}
BST p,q,s,parent;
p = T;
while (p!=NULL)
{
if (p->data == element) break;
parent = p;
p = (p->data < element) ? p->rchild: p->lchild;
}
if (p==NULL)
{
// cout << "该二叉排序树中无您要删除的值!"<<endl;
return false;
}
if ((p->lchild==NULL)&&(p->rchild==NULL))
{
//重置其父亲结点的左右子孩子
if (parent->lchild != NULL&&parent->lchild->data==element)
{
parent->lchild = NULL;
}
if (parent->rchild!=NULL&&parent->rchild->data==element)
{
parent->rchild = NULL;
}
return true;
}
else if (p->lchild!=NULL&&p->rchild==NULL)
{
//要让p的左孩子接上
s=p->lchild;
p ->data= s->data;
p->lchild = s->lchild;
delete s;
return true;
}
else if (p->lchild==NULL&&p->rchild!=NULL)
{
//要让p的右孩子接上
s = p->rchild;
p->data = s->data;
p->rchild = s->rchild;
delete s;
return true;
}
else
{
q = p;
s = p->lchild;
while (s->rchild!=NULL)
{
q = s;
s = s->rchild;
}
p->data = s->data;
if (q!=p)
{
q->rchild = s->lchild;
}
else
{
q->lchild = s->lchild;
}
delete s;
return true;
}
}
/*模板-------------------------------------------------------------结束*/ int flag;
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=;
}
int main()
{
int t,n,k,x;
BST tree[]; scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(int i=; i<n; i++)
{
BST T=NULL;
for(int j=; j<k; j++) //建树;
{
scanf("%d",&x);
insertBST(T,x);
}
tree[i]=T;
}
//找形状种类数;
int ans=;
for(int i=; i<n; i++)
{
int flog=;
for(int j=i+; j<n; j++)
{
flag=;
judge(tree[i],tree[j]);
if(flag)
{
flog=;
break;
}
}
if(flog)
++ans;
}
printf("%d\n",ans);
}
return ;
}
nyoj-1278-Prototypes analyze(二叉排序树模板)的更多相关文章
- nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板
参考博客:https://blog.csdn.net/stpeace/article/details/9067029 参考博客:https://blog.csdn.net/baidu_35643793 ...
- Prototypes analyze(二叉排序树,不同树形个数)
Prototypes analyze 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 ALpha Ceiling Manufacturers (ACM) is ana ...
- nyoj 28-大数阶乘 (大数模板)
28-大数阶乘 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:19 submit:39 题目描述: 我们都知道如何计算一个数的阶乘,可是,如果这个数 ...
- 每天一套题打卡|河南省第九届ACM/ICPC
A 表达式求值 表达式求值:可以用递归求解,也可以用栈模拟,考过多次. 类似题目:NYOJ305,NYOJ35 用栈模拟做法: #include <stdio.h> #include &l ...
- 二叉树—-1(No.9HN省赛小题)
题目: 1013: Prototypes analyze 时间限制: 1 Sec 内存限制: 128 MB提交: 6 解决: 4[提交][状态][讨论版] 题目描述 ALpha Ceiling M ...
- 数据结构图文解析之:树的简介及二叉排序树C++模板实现.
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- NYOJ 1085 数单词 (AC自己主动机模板题)
数单词 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 为了可以顺利通过英语四六级考试,如今大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中能够通过六 ...
- nyoj 36 最长公共子序列【LCS模板】
最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公共子序列也称作最 ...
- NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】
914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...
随机推荐
- corethink功能模块探索开发(四)让这个模块跑起来
让这个模块跑起来,太费劲了,多半原因是自己太粗心,opencmf.php中“uid”写成了“pid”,de了好几天的bug也没有搞出来,又加上最近发生了些事(brokenhearted)... 上报错 ...
- iOS 绘制漂亮的折线图
效果图是这样的: 关键是在 基本策略 是描点 和 连线. 折线基础版本,我找到网上的第三方,UUChart . 特点是朴素,简单,扩展性强. 效果图重点是在折线要有阴影,于是 重点 放在 折线发散的阴 ...
- git操作整理
昨天手残 然后在GitHub for windows 上点了revert 然后就给重置了 更手残的是又给同步了 . 但是 GitHub 会保留之前的版本 . 只要删掉本次修改就可. 解决方案: g ...
- mysql case的语法
测试表:team 第一种语法: CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_ ...
- gstreamer-tips-picture-in-picture-compositing
http://www.oz9aec.net/index.php/gstreamer/347-more-gstreamer-tips-picture-in-picture-compositing htt ...
- Linux 邮件服务搭建
Linux 邮件服务搭建 邮件服务针对,在大型企业使用的比较多,一般小型企业都会买一些邮件服务,或者使用一些免费的邮件服务,达到我们使用的需求,并且不需要自己维护,下面我就来简单安装一下两个邮箱的案例 ...
- library-type:fr-unstanded vs fisrt-stand vs second-stanrd
建库时是否是链特异性建库. Tophat2: --library-type The default is unstranded (fr-unstranded). If either fr-firsts ...
- poj 3414 Pots【bfs+回溯路径 正向输出】
题目地址:http://poj.org/problem?id=3414 Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- ADO.Net连接Mysql
首先下载一个mysql.data.dll拷贝到bin下面并引用一下 using MySql.Data.MySqlClient; class Program { static void Main(str ...
- vc 改变控制台字符颜色
#include <Windows.h> #include <stdio.h> #include <iostream> using namespace std; i ...