关于二叉排序树 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 ...
随机推荐
- jquery中取消和绑定hover事件的正确方式
在网页设计中,我们经常使用jquery去响应鼠标的hover事件,和mouseover和mouseout事件有相同的效果,但是这其中其中如何使用bind去绑定hover方法呢?如何用unbind取消绑 ...
- 十步完全理解SQL
转载于:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序 ...
- sql语句获取今天、昨天、近7天、本周、上周、本月、上月、半年数据
话说有一文章表article,存储文章的添加文章的时间是add_time字段,该字段为int()类型的,现需要查询今天添加的文章总数并且按照时间从大到小排序,则查询语句如下: select * fro ...
- jquery 添加节点的几种方法介绍
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- jquery 时间运算、格式化的方法扩张
/* 函数:日期 加n天 参数:n是天数 返回:n天后的日期 */ Date.prototype.addDays = Date.prototype.addDays || function (n) { ...
- codevs 1215 迷宫
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n ...
- BZOJ 3295 【Cqoi2011】 动态逆序对
Description 对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数.给\(1\)到\(n\)的一个排列,按照某种顺序依 ...
- MongoDB JAVA API Filters
Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...
- U3D屏幕空间到世界空间变换
using UnityEngine; using System.Collections; public class FPSCam : MonoBehaviour { Vector3 lastPos; ...
- nginx学习(1):编译、安装、启动
一.下载 从官网http://nginx.org/en/download.html 下载稳定版(目前最新稳定版是1.6.2) 二.解压 tar zxf nginx-1.6.2.tar.gzcd ngi ...