关于二叉排序树 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 ...
随机推荐
- 2014 UESTC暑前集训动态规划专题解题报告
A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...
- UVA 10375 Choose and divide【唯一分解定理】
题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...
- Vijos1680距离/openjudge2988计算字符串的距离[DP]
描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“abcb_c_”都是X的扩展 ...
- [No000065]python 获取当前时间
要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970年到现在时间相隔的时间.用下面的方式来取得当前时间的时间戳: import time print(time.time()) 输出的结果是 ...
- [No00001D]解决5个问题,马上开口说英语
- 深入理解Linux修改hostname(转载)
http://www.cnblogs.com/kerrycode/p/3595724.html http://www.centoscn.com/CentOS/config/2014/1031/4039 ...
- 启动Eclipse后卡在 android sdk content loader 的解决办法
Make sure that eclipse is not active. If it is active kill eclipse from the processes tab of the tas ...
- windows和ubuntu下gif动态图片的制作
现在社交软件中, 各种各样的动图为大家交流很大的乐趣. Gif图片比视频小, 比静态JPG图片形象生动, 更适用于产品展示和步骤演示等. 这里简单介绍一下在window系统和ubuntu系统下gif ...
- Entity Framework 迁移命令 详解
一.Entity Framework 迁移命令(get-help EntityFramework) Enable-Migrations 启用迁移 Add-Migration 为挂起的Model变化添加 ...
- 前端面试——css篇
css盒子模型 在W3C模型中: 总宽度 = margin-left + border-left + padding-left + width + padding-right + border-rig ...