关于二叉排序树 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 ...
随机推荐
- using关键字的用法
1.using 关键字可以用来导命名空间,与java中的import类似. 2.using关键字可以用来释放资源,并且被释放的资源代码是非托管代码. 既然可以释放非托管代码,那么什么是非托管代码? 我 ...
- u3d_shader_surface_shader_3
参考http://my.oschina.net/u/138823/blog/181131 加了个凹凸贴图: 抱歉把女神苏菲做成这样. 一:Normal Texture的制作: 1.首先是Normal ...
- js正则验证邮箱、手机号、年龄
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python的高级特性1:容易忽略的不可变类型
python中有一些容易忽略的不可变类型(str,integer,tuple,None) #错误演示 In [45]: def demo(lst=[]): ....: lst.append(" ...
- IO调度器(二) IO的中断返回
IO的中断返回也是相当让人激动的一件事情: 28470 1) | handle_irq() { 28471 1) 0.237 us | ...
- android 中退出程序的两种方式
转自:http://blog.sina.com.cn/s/blog_5da93c8f0100t76l.html 思考:如何安全的退出程序? finish是Activity的类,仅仅针对Activity ...
- node基础03:使用函数
1.使用函数 //server.js var http = require("http"); var output = require("./output"); ...
- ViewModelBase && ObservableObject
ViewModelBase && ObservableObject 在Mvvm中,ViewModel和Model都需要具有通知界面更新数据的能力,这都要借助于WPF中的 INotify ...
- servlet乱码问题总结
在学习时servlet乱码问题还是挺严重的,总结一下有三种情况 1.新建HTML页面后浏览出现乱码 2.以post形式请求时出现乱码 3.以get形式请求时出现乱码 让我们一个一个来解决吧 1.新建H ...
- 【开源】LLMAnimator 60多种动画让你的应用动起来
github: https://github.com/brookshi/LLMAnimator ,欢迎star/fork 之前做android的时候需要给应用加些动画效果,在github上找到这个库 ...