参考博客: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)模板的更多相关文章

  1. Prototypes analyze(二叉排序树,不同树形个数)

    Prototypes analyze 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 ALpha Ceiling Manufacturers (ACM) is ana ...

  2. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  3. 数据结构图文解析之:树的简介及二叉排序树C++模板实现.

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  4. 二叉排序树(BST)构造与应用

             二叉排序树(BST)构造与应用       本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社.       本博文作为学习资料整理. 源码是VC+ ...

  5. nyoj-1278-Prototypes analyze(二叉排序树模板)

    题目链接 思路:建树之后,判断有多少种不同的树. 判断不同的树,简单的思路是遍历数组,判断数组后面是否存在一样的树 /* Name:NYOJ-1278-Prototypes analyze Copyr ...

  6. 哈夫曼树;二叉树;二叉排序树(BST)

    优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...

  7. 二叉查找树BST 模板

    二叉查找树BST 就是二叉搜索树 二叉排序树. 就是满足 左儿子<父节点<右儿子 的一颗树,插入和查询复杂度最好情况都是logN的,写起来很简单.   根据BST的性质可以很好的解决这些东 ...

  8. 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较

    二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』   二分法的存储要求:要求顺序存储,以便于根据下标随机访问   二分法的时间效率:O(Log(n))   二分 ...

  9. 二叉排序树BST代码(JAVA)

        publicclassTest{     publicstaticvoid main(String[] args){         int[] r =newint[]{5,1,3,4,6,7 ...

随机推荐

  1. Linux 中find命令

    1.在当前目录下找以txt结尾的文件 find . -name '*.txt' 2.在当前目录下找以所有字母开头的文件 find . -name '[a-z]*' 3.在/etc 目录下找以host开 ...

  2. (转)idea创建Maven项目时Maven插件内看不到mybatis-generator

    转载地址:https://blog.csdn.net/yytwiligt/article/details/81010360 创建Maven项目时插件配置添加了mybatis-generator但是右侧 ...

  3. Python学习笔记3 函数_20170614

    # 函数 定义 def my_abs(x) : if not isinstance(x, (int, float)) : raise TypeError('bad operand type') if ...

  4. 4.web基础$_POST

  5. django内容回顾:

    Django 下载安装 命令行 pip install django==1.11.26 -i 源 pycharm 创建项目 命令行 django-admin startproject 项目名 pych ...

  6. 工具资源系列之给 windows 装个 vmware 虚拟机

    如果长时间处于同一种环境,慢慢得我们会觉得有些无聊,所以适当地出去走走看看外面的世界能带给我们不一样的体验. 所以,何不出去走走,看看另一个世界? 然而,平时需要工作很难抽身无所顾忌地潇洒走开,这是不 ...

  7. CF1278C-Berry Jam-(前缀和)

    https://vjudge.net/problem/CodeForces-1278C 题意:有2n瓶果酱,中间有一个楼梯隔开,从中间往左或右两边清空果酱,使得两种果酱的数量相等,最少要清空多少瓶 思 ...

  8. Educational Codeforces Round 63 (Rated for Div. 2) D dp(最大连续子序列)

    https://codeforces.com/contest/1155/problem/D 题意 一个n个数的数组\(a[i]\),可以选择连续的一段乘x,求最大连续子序列的值 题解 错误思路:贪心, ...

  9. ndt算法学习

    NDT算法原理: NDT算法的基本思想是先根据参考数据(reference scan)来构建多维变量的正态分布, 如果变换参数能使得两幅激光数据匹配的很好,那么变换点在参考系中的概率密度将会很大. 因 ...

  10. Delta-wave HDU - 1030

    Delta-wave HDU - 1030 A triangle field is numbered with successive integers in the way shown on the ...