二叉查找树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 ...
随机推荐
- Kettle的改名由来
不多说,直接上干货! 当时啊,因为很多开源项目到最后都成了无人管的项目,为了避免这种情况的发生,要尽快为Kettle项目构建一个社区.这就意味着,在随后的几年可能需要回答上千封的电子邮件和论坛帖子.幸 ...
- sql server 无法创建索引 因为对象名称和索引名称重复
需求分析:如下图所示,给T_DD_OP1200_Final表的Id字段添加主键,保存时弹出 “T_DD_OP1200_Final”表- 无法创建索引“PK_T_DD_OP1200_Final”. 因为 ...
- 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)
题目描述 Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= ...
- SAI / PS绘画一个卡通女孩详解
本教程介绍使用SAI / PS绘画一个卡通女孩的教程 ,教程很详细,动起你的小手一起来试试吧! 软件下载:http://www.dongmansoft.com/xiazai.html 想要Get到更多 ...
- 简洁的MVC思想框架——Nancy(环境配置与Get操作)
Nancy官网——https://github.com/NancyFx/Nancy 概述:Nancy是一个开源的Web轻型框架内核符合MVC思想,有开发方便,路由简单的特点,而且功能齐全 起步:Hel ...
- ERROR in xxxx.js from UglifyJS——配置版本混杂版
常规解决套路可以参考这篇:https://segmentfault.com/a/11... 我采用了上面的做法,依然没法解决.我采用的是vue-cli脚手架自动生成的项目结构: vue-cli版本 2 ...
- 洛谷 P2040 打开所有的灯
P2040 打开所有的灯 题目背景 pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz... 题目描述 这个灯很奇(fan)怪(ren),点一下就 ...
- Leetcode-Best Time to Buy and Sell Stock -java
题目: Say you have an array for which the ith element is the price of a given stock on day i. If you w ...
- hdu 2191 悼念512汶川大地震遇难同胞——珍惜如今,感恩生活
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...
- Leetcode--easy系列9
#198 House Robber You are a professional robber planning to rob houses along a street. Each house ha ...