12. binary search Trees
12. binary search Trees
The search tree data structure supports many dynamic-set operations,including search ,minimum,maximum,predecessor,successor ,insert ,and delete.
Thus, we can use a search tree both as a dictionary and as a priority queue.
因此,我们拿搜索树既可以用做字典,也可以用作优先队列。
12.1 what is a binary search tree ?
A binary search tree is organized, as the name suggests, in a binary tree, as shown in Figure 12.1.

binary-search-tree property:
Let x be a node in a binary search tree. If y is a node in the left subtree of x, then y.key <=x:key. If y is a node in the right subtree of x, then y:key >= x:key.
二分搜索树的性质:
x是一个二分搜索树,如果y是x的左子树的一个节点,则y.key<=x.key ,如果y是x的右子树,则y.key>=x.key.
The binary-search-tree property allows us to print out all the keys in a binary search tree in sorted order by a simple recursive algorithm, called an inorder tree walk.
This algorithm is so named because it prints the key of the root of a subtree between printing the values in its left subtree and printing those in its right subtree.

12.2 Query a binary search tree.
Besides the SEARCH operation, binary search trees can support such queries as MINIMUM, MAXIMUM, SUCCESSOR, and PREDECESSOR
Searching
Given a pointer to the root of the tree and a key k, TREE-SEARCH returns a pointer to a node with key k if one exists; otherwise, it returns NIL.


Minimum and maximum


Successor and predecessor
Given a node in a binary search tree, sometimes we need to find its successor in the sorted order determined by an inorder tree walk.
给定一个节点,有时候我们需要找到利用in order tree wark 决定的顺序的继任者。
If all keys are distinct, the
successor of a node x is the node with the smallest key greater than x:key.
如果所有的关键字是不同的,那么节点x的接任者就是比x.key 大的最小值。

Insertion and deletion
modifying the tree to insert a new element is relatively straightforward,but handling deletion is somewhat more intricate .
插入相对直接,但是删除可能麻烦些。
INSERTION


DELETION
The overall strategy for deleting a node ́ from a binary search tree T has three basic cases but, as we shall see, one of the cases is a bit tricky.
If z has no children, then we simply remove it by modifying its parent to re- place ́ with NIL as its child.
z没有孩子
If ́ has just one child, then we elevate that child to take ́'s position in the tree by modifying ́'s parent to replace ́ by ́'s child.
If ́ has two children, then we find ́'s successor y—which must be in ́'s right subtree—and have y take ́'s position in the tree. The rest of ́'s original right subtree becomes y's new right subtree, and ́'s left subtree becomes y's new left subtree. This case is the tricky one because, as we shall see, it matters whether y is ́'s right child.
It organizes its cases a bit differently from the three cases outlined previously by considering the four cases shown

In order to move subtrees around within the binary search tree ,we define a subroutine Transplant ,which replaces one subtree as a child of its parent with another subtree.

With the transplant procedure in hand ,here is the procedure that deletes node z from binary search tree T :

12. binary search Trees的更多相关文章
- Method for balancing binary search trees
Method for balancing a binary search tree. A computer implemented method for balancing a binary sear ...
- 【二叉查找树】02不同的二叉查找树个数II【Unique Binary Search Trees II】
提到二叉查找树,就得想到二叉查找树的递归定义, 左子树的节点值都小于根节点,右子树的节点值都大于根节点. +++++++++++++++++++++++++++++++++++++++++++++++ ...
- 【二叉查找树】01不同的二叉查找树的个数【Unique Binary Search Trees】
当数组为1,2,3,4,...,n时,基于以下原则构建的BST树具有唯一性: 以i为根节点的树,其左子树由[1,i-1]构成,其右子树由[i+1, n]构成. 我们假定f(i)为以[1,i]能产生的U ...
- 【LeetCode】96. Unique Binary Search Trees 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 记忆化递归 动态规划 卡特兰数 日期 题目地址:ht ...
- [LeetCode] Unique Binary Search Trees 独一无二的二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- [LeetCode] Unique Binary Search Trees II 独一无二的二叉搜索树之二
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- 2 Unique Binary Search Trees II_Leetcode
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- 【leetcode】Unique Binary Search Trees (#96)
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- LEETCODE —— Unique Binary Search Trees [动态规划]
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
随机推荐
- MySQL 高可用架构在业务层面细化分析研究
相对于传统行业的相对服务时间9x9x6或者9x12x5,由于互联网电子商务以及互联网游戏的实时性,所以服务要求7*24小时,业务架构无论是应用还是数据库,都须要容灾互备.在mysql的体系中,最好通过 ...
- Ios 项目从头开发 MVVM模式(三)
1.话说,本来想做个聚合查询功能.可是我的重点想研究xmpp聊天功能.所以使用mvvm模式做了全然模式51job主界面的页面. 2.首先给大家看我执行起来的界面. 3.界面非常easy,做这个界面主要 ...
- Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find resource 'solrconfig.xml' in classpath or 'D:\solr\solr-7.2.1\server\solr\new_core'
\solr-7.2.1\server\solr\configsets\_default 下的conf 复制到: \solr-7.2.1\server\solr\new_core
- UVA10600 ACM Contest and Blackout —— 次小生成树
题目链接:https://vjudge.net/problem/UVA-10600 In order to prepare the “The First National ACM School Con ...
- bat文件中调用传参的问题
https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-lin ...
- 使用Kotlin如何startActivity
没错,就是这么简单的一个功能,不过由于初学kotlin,所以找了很久才找到如何写,所以还是贴出来给需要的人吧,上代码: startActivity(Intent(MainActivity@this, ...
- AutoIT: 学习对GUI Sample上所有的资源进行操作
$handle= WinGetHandle("Sample GUI") ;,"SRE Example 3 Result", $handle) $ctrl= Co ...
- mysql同步延迟导致的问题
前几天又遇到一个mysql读写分离的坑, 在将数据写入master后,因为存在同步延迟,所以如果立马去从库查询刚刚插入的数据可能会出现查询不到数据的情况, 解决办法:强制从主库读取数据,将插入和查询放 ...
- win8 使用notepad++写C代码
1. 安装mingw,这里有个不错的教程 http://www.metsky.com/archives/588.html 2. 在notepad++里做设置, 安装nppexec: nppexec-& ...
- bzoj 2152: 聪聪可可【点分治】
裸的点分治,运算在模3下进行然后统计答案的时候统计余1的*余2的*2+余0的^2 #include<iostream> #include<cstdio> using names ...