二叉查找树BST 模板
int Search(int k,int x)
{
if(x<a[k].key && a[k].l) Search(a[k].l,x);
else if(x>a[k].key && a[k].r) Search(a[k].r,x);
else return k;
}
2.查询最小值最大值
int getmin(int k)
{
if(!a[k].l)return k;
return getmin(a[k].l);
}
int getmax(int k)
{
if(!a[k].r)return k;
return getmax(a[k].r);
}
3.输出排序(其实就是中根遍历)
void Leftorder(int k)
{
if(a[k].l)Leftorder(a[k].l);
printf("%d ",a[k].key);
if(a[k].r)Leftorder(a[k].r);
}
void InsertNode(int k,int x)
{
if(tree_size==)root=++tree_size,a[root].key=x;
else if(x<=a[k].key){
if(a[k].l)InsertNode(a[k].l,x);
else{
tree_size++;
a[tree_size].key=x;
a[tree_size].p=k;
a[k].l=tree_size;
}
}
else if(x>a[k].key){
if(a[k].r)InsertNode(a[k].r,x);
else{
tree_size++;
a[tree_size].key=x;
a[tree_size].p=k;
a[k].r=tree_size;
}
}
}
2.删除
对于删除点的操作,分下面三种情况:
(1)删的这个点没有左儿子 -> 让它的右子树代替它
(2)删的这个点没有右儿子 -> 让它的左子树代替它
(3)删的这个点子孙齐全 -> 在它的的左子树里选一个最小的(或者在右子树里找一个最大的)放在它的位置,好理解吧
}
void Treeplant(int k,int x,int y) //用子树y代替x
{
if(x==root)root=y;
else if(x==a[a[x].p].l)a[a[x].p].l=y;
else a[a[x].p].r=y;
if(a[y].key)a[y].p=a[x].p;
}
void DeleteNode(int k,int x)
{
if(!a[x].l)Treeplant(k,x,a[x].r); //情况一
else if(!a[x].r)Treeplant(k,x,a[x].l); //情况二
else{ //情况三
int y=getmin(a[x].r);
if(a[y].p!=x)
{
Treeplant(,y,a[y].r);
a[y].r=a[x].r,a[a[y].r].p=y;
}
Treeplant(,x,y);
a[y].l=a[x].l,a[a[y].l].p=y;
}
}
这点东西都跟算法导论学的 , 很好理解 ,就扯这么多了 ,立个flag明天写Splay
二叉查找树BST 模板的更多相关文章
- 二叉查找树(BST)
二叉查找树(BST):使用中序遍历可以得到一个有序的序列
- 查找系列合集-二叉查找树BST
一. 二叉树 1. 什么是二叉树? 在计算机科学中,二叉树是每个结点最多有两个子树的树结构. 通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). 二叉树常 ...
- [学习笔记] 二叉查找树/BST
平衡树前传之BST 二叉查找树(\(BST\)),是一个类似于堆的数据结构, 并且,它也是平衡树的基础. 因此,让我们来了解一下二叉查找树吧. (其实本篇是作为放在平衡树前的前置知识的,但为了避免重复 ...
- 【查找结构 2】二叉查找树 [BST]
当所有的静态查找结构添加和删除一个数据的时候,整个结构都需要重建.这对于常常需要在查找过程中动态改变数据而言,是灾难性的.因此人们就必须去寻找高效的动态查找结构,我们在这讨论一个非常常用的动态查找树— ...
- 二叉查找树(BST)的实现
一.二叉树介绍 二叉查找树(Binary Search Tree,BST),又称二叉排序树,也称二叉搜索树,它或者是一颗空树,或者具有如下性质的树:若它的左子树不为空,则左子树上所有节点的值都小于根节 ...
- 3.2 符号表之二叉查找树BST
一.插入和查找 1.二叉查找树(Binary Search Tree)是一棵二叉树,并且每个结点都含有一个Comparable的键,保证每个结点的键都大于其左子树中任意结点的键而小于其右子树的任意结点 ...
- 从一段简单算法题来谈二叉查找树(BST)的基础算法
先给出一道很简单,喜闻乐见的二叉树算法题: 给出一个二叉查找树和一个目标值,如果其中有两个元素的和等于目标值则返回真,否则返回假. 例如: Input: 5 / \ 3 6 / \ \ 2 4 7 T ...
- 二叉查找树BST
每棵子树头节点的值都比各自左子树上所有节点值要大,也都比各自右子树上所有节点值要小. 二叉查找树的中序遍历序列一定是从小到大排列的. 一个节点的后继节点是指,这个节点在中序遍历序列中的下一个节点.相应 ...
- K:二叉查找树(BST)
相关介绍: 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tre ...
随机推荐
- xBIM 实战01 在浏览器中加载IFC模型文件
系列目录 [已更新最新开发文章,点击查看详细] 一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5 选择一个空的项目 新建完成后,项目结构如下: 二.添 ...
- OC冒泡排序算法
面试的时候很多公司会要求写一个冒泡排序算法,于是用OC写了一个,代码如下所示 需要注意的事项:oc数组只能存放oc对象,因此遍历数组输出的时候,记得通过NSString对象转换成intValue #i ...
- Codeforces 703D Mishka and Interesting sum 离线+树状数组
链接 Codeforces 703D Mishka and Interesting sum 题意 求区间内数字出现次数为偶数的数的异或和 思路 区间内直接异或的话得到的是出现次数为奇数的异或和,要得到 ...
- Java多线程编程模式实战指南(二):Immutable Object模式--转载
本文由本人首次发布在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-immutable-o ...
- 常用css框架 Sass/Less
Bootstrap less/sass Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量.嵌 ...
- (转)PHP(其他语言类似)编码的规范性
为了提高工作效率,保证开发的有效性和合理性,并最大程度提高程序代码的可读性和可重复利用性,提高沟通效率,需要一份代码编辑规范. 一.文件标记: 1.所有php文件 ...
- (转载) Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框
Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读 ...
- jquery.gritter 提示
首先引入css和js文件 <link rel="stylesheet" href="<%=basePath%>assets/css/jquery.gri ...
- 第三方-FastDFS分布式文件系统
1.什么是FastDFS? FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制, 充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标, ...
- HDU 1667 The Rotation Game (A*迭代搜索)
题目大意:略 每次选择一个最大深度K,跑IDA* 估价函数H=8-中间8个格里出现次数最多的数的个数x,即把它填满这个数最少需要8-x次操作,如果dep+H>K,就跳出.. 深搜的时候暴力修改, ...