关于二叉排序树 BST
#include<stdio.h>
#include<stdlib.h> typedef struct node
{
double w;
struct node *l,*r;
}*Node; void Build(Node &rt,double a)//建树
{
if(rt==NULL)
{
rt=new node;
rt->w=a;
rt->l=;
rt->r=;
}
else
{
if(a<rt->w)
Build(rt->l,a);
else
Build(rt->r,a);
}
}
double fin(struct node *rt) //找最小的权
{
if(!rt)
return ;
else if(!rt->l)
return rt->w;
else
return fin(rt->l);
} void delet(Node &rt,double w)//删除权为w点
{
if(!rt)
{
printf("没有\n");
return ;
}
else if(rt->w<w)
delet(rt->r,w);
else if(rt->w>w)
delet(rt->l,w);
else if(rt->l&&rt->r)
{
struct node *tmp;
tmp=rt;
tmp->w=fin(tmp->r);
delet(tmp->r,tmp->w);
}
else
{
struct node *t;
t=rt;
if(rt->l)
rt=rt->l;
else
rt=rt->r;
delete(t);
} }
void in(struct node *rt) //中序
{
if(rt)
{
in(rt->l);
printf("%lf ",rt->w);
in(rt->r);
}
else
return ;
}
double w;
int aim; void search(Node rt,int &cnt) //找第aim小
{
if(rt)
{
search(rt->l,cnt);
cnt++;
if(cnt==aim)
{
w=rt->w;
return;
}
search(rt->r,cnt); }
}
int main()
{
int n;
scanf("%d",&n);
struct node *root;
root=;
for(int i=;i<=n;i++) //插入
{
double a;
scanf("%lf",&a);
Build(root,a);
}
in(root);
printf("\n");
scanf("%d",&n);
for(int i=;i<=n;i++) //删除
{
double a;
scanf("%lf",&a);
delet(root,a);
in(root);
printf("\n");
}
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&aim); //第aim小
int cnt=;
search(root,cnt);
printf("%lf\n",w);
}
return ;
}
/*
9
3 4 2 5 7 6 3.5 3.1 3.6
0
3
6
7
3 */
关于二叉排序树 BST的更多相关文章
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- 二叉排序树(BST)构造与应用
二叉排序树(BST)构造与应用 本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社. 本博文作为学习资料整理. 源码是VC+ ...
- 【数据结构】简单谈一谈二分法和二叉排序树BST查找的比较
二分法查找: 『在有序数组的基础上通过折半方法不断缩小查找范围,直至命中或者查询失败.』 二分法的存储要求:要求顺序存储,以便于根据下标随机访问 二分法的时间效率:O(Log(n)) 二分 ...
- 二叉排序树BST代码(JAVA)
publicclassTest{ publicstaticvoid main(String[] args){ int[] r =newint[]{5,1,3,4,6,7 ...
- 二叉排序树BST+求树深度算法
#include "stdio.h" #include "malloc.h" typedef struct node { int key; struct nod ...
- 判断二叉树是否二叉排序树(BST)
算法思想:由于二叉排序树的中序遍历可以得到一个有序的序列,因此,我们可以使用中序遍历进行求解. 代码如下: #include <stack> using namespace std; ty ...
- 哈夫曼树;二叉树;二叉排序树(BST)
优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...
- 二叉排序树BST
注意:对一个二叉排序树进行中序遍历时,得到的序列是一个按值从小到大排列的有序序列 查找性能的分析:
- 4.5---判断是否是二叉排序树BST(CC150)
public boolean checkBST(TreeNode root) { return isBST(root, Long.MIN_VALUE, Long.MAX_VALUE); } publi ...
随机推荐
- 三维网格分割算法(Random Walks)
首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- 模版(template)
模版(template) 在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字 ...
- 这几天在搞UNITY3D,感觉回到了AS2
这几天在搞UNITY3D,感觉回到了AS2 代码没有MAIN, 代码在屏幕上,和元件绑定
- u3d_Shader_effects笔记3 half diffuse 和 ramp texture
1.前面的心情 每次写博客,先写心情也好,就当是小日记了吧.现在已经懒到不想动笔和纸来写日记了.近两天公司的活较少,晚上直接回来了,没有留公司.在公司看代码,不做工,就困... 哎,小辉哥家的老房子后 ...
- [No000064]python 变量命名规范
python源码和其他一些书籍,命名各种个性,没有一个比较统一的命名规范.于是总结了一些,供参考. 模块名: 模块应该使用尽可能短的.全小写命名,可以在模块命名时使用下划线以增强可读性.同样包的命名也 ...
- PHP用户注册邮箱验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- Linux中 groupadd 和 useradd 的命令说明
groupadd [options] group 说明The groupadd command creates a new group account using the values specifi ...
- BZOJ 1066 【SCOI2007】 蜥蜴
Description 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为$1$,蜥蜴的跳跃距离是d,即蜥蜴可以跳 ...
- 使用gogs,drone搭建自动部署
使用gogs,drone搭建自动部署 使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台Docker是使用go开发的开源容器引擎D ...