二叉搜索树(Binary Search Trees)
ADT二进制搜索树(The ADT Binary Search Tree)
搜索特定项目是不适合ADT二叉树的一种操作。
它由ADT二进制搜索树更正
二叉搜索树按值组织其数据
二叉搜索树中的每个节点n满足以下属性
n的值大于其左子树TL中的所有值
n的值小于其右子树TR中的所有值
TL和TR都是二叉搜索树
Searching for a particular item is one operation for which the ADT binary tree is ill suited.
It is corrected by the ADT binary search tree
A binary search tree organizes its data by value
Each node n in a binary search tree satisfies the following properties
n’s value is greater than all values in its left subtree TL
n’s value is less than all values in its right subtree TR
Both TL and TR are binary search trees
通过这种数据组织,您可以在二叉树中搜索特定项目,而不是位置
二叉搜索树通常用于存储在树中的实例包含许多不同信息字段的情况。 例如,二叉搜索树中的每个节点可能是包含人名,身份证号码,地址,电话号码等的人物对象。
This organization of data enable you to search a binary tree for a particular item, given its value instead of position
A binary search tree is often used in situations where the instances stored in the tree contain many different fields of information. For example, each node in a binary search tree might be a person object containing a person’s name, id number, address, telephone number, and so on
二叉搜索树中的节点或实例具有专门指定的搜索关键字
搜索关键字是节点的一部分,用于在节点集合中标识它(例如,学生ID标识每个人对象。)
搜索键值不应该是可修改的
此搜索关键数据类型应实现Comparable接口
A node or an instance in a binary search tree has a specially designated search key
A search key is the part of a node that identifies it within a collection of nodes( For example, a student id identifies each person object.)
The search key value should not be modifiable
This search-key data type should implement the Comparable interface
二叉搜索树的递归定义是二叉搜索树中的每个节点n满足以下属性
n的搜索关键字大于其左子树TL中的搜索关键字
n的搜索关键字小于右子树TR中的搜索关键字
TL和TR都是二叉搜索树
The recursive definition of a binary search tree is Each node n in a binary search tree satisfies the following properties
n’s search key is greater than search keys in its left subtree TL
n’s search key is less than search keys in its right subtree TR
Both TL and TR are binary search trees
将基本ADT二叉树扩展到ADT二进制搜索树的操作如下:
将新项插入二叉搜索树
使用二叉搜索树中的给定搜索关键字删除项目
使用二叉搜索树中的给定搜索关键字检索项目
按前序,按中序或后序遍历二叉搜索树中的项目
Operations that extends the basic ADT binary tree to the ADT binary search tree are as follows:
Insert a new item into a binary search tree
Delete the item with a given search key from a binary search tree
Retrieve the item with a given search key from a binary search tree
Traverse the items in a binary search tree in preorder, inorder, or postorder
在面向位置的ADT堆栈和队列的实现中,插入和删除到ADT中与数据的值无关
但是,在二叉搜索树中,插入,删除和检索操作是按搜索键值,而不是按位置
搜索键有助于搜索过程,因为我们只需知道关键信息即可找到特定实例或确定树中的正确位置
In the implementations of the position- oriented ADT stack, and queue, insertion and deletion into the ADT was independent of the value of the data
In the binary search tree, however, the insertion, deletion, and retrieval operations are by search-key value, not by position
The search key facilitates the search process, since we need to know only the key information to find a particular instance or to determine the proper position for it in the tree
二叉树的遍历操作适用于二进制搜索树而不进行更改,因为二叉搜索树是二叉树
The traversal operations for a binary tree apply to a binary search tree without changes, because a binary search tree is a binary tree
ADT二进制搜索树操作的算法(Algorithms for the Operations of the ADT Binary Search Tree)
由于二叉搜索树本质上是递归的,因此为其操作制定递归算法是很自然的
搜索算法在二叉搜索树binarySearchTree中搜索搜索键为searchKey的项目
search(binarySearchTree,searchKey)
Since the binary search tree is recursive in nature, it is natural to formulate recursive algorithms for its operations
A search algorithm searches the binary search tree binarySearchTree for the item whose search key is searchKey
search(binarySearchTree, searchKey)
搜索算法(A search algorithm)
搜索(BinarySearchTree树,KeyType键)
if(树为空){
找不到所需的记录
} else if(key == root的项目的搜索键){
找到所需的记录
} else if(key <root项目的搜索键){
搜索(树的左子树,键)
}其他{
搜索(树的右子树,键)
}
search(BinarySearchTree tree, KeyType key)
if ( tree is empty){
The desired record is not found
}else if(key == search key of root’s item){
The desired record is found
}else if (key < search key of root’s item){
search(Left subtree of tree, key)
}else{
search(Right subtree of tree, key)
}
ADT二进制搜索树操作的算法:插入(Algorithms for the Operations of the ADT Binary Search Tree: Insertion)
使用搜索确定树中插入新项目的位置始终可以轻松插入
无论您在树中插入什么新项,搜索都将始终在空子树上终止
因此,搜索始终会告诉您将项目作为新叶子插入
Using search to determine where in the tree to insert a new item always lead to an easy insertion
No matter what new item you insert into the tree, search will always terminate at the empty subtree
Thus, search always tells you to insert the item as a new leaf
添加叶子只需更改父级中的相应引用,插入所需的工作几乎与相应的搜索相同
Adding a leaf requires only a change of the appropriate reference in the parent, the work required for an insertion is virtually the same as that for the corresponding search
insertItem(treeNode,newItem)
将newItem插入到treeNode为根的二叉搜索树中
insertItem(treeNode, newItem)
Inserts newItem into the binary search tree of which treeNode is the root
b) search terminates at a leaf
c) insertion at a leaf
ADT二进制搜索树操作的算法:删除(Algorithms for the Operations of the ADT Binary Search Tree: Deletion)
删除步骤
使用搜索算法查找具有指定键的项目
如果找到该项目,请从树中删除该项目
节点N包含要删除的项目的三种可能情况
N是一片叶子
N只有一个孩子
N有两个孩子
Steps for deletion
Use the search algorithm to locate the item with the specified key
If the item is found, remove the item from the tree
Three possible cases for node N containing the item to be deleted
N is a leaf
N has only one child
N has two children
删除节点N的策略
如果N是叶子
将N的父级中的引用设置为null
如果N只有一个子级
让N的父母领养N的孩子
如果N有两个孩子
找到比树点N更容易从树中删除的另一个节点M.
将M中的项目复制到N.
从树中删除节点M.
节点M可以
inorder successor – Bob右侧子树中最左边的节点,或者
Inorder previouscessor – Bob左侧子树中最右边的节点。
Strategies for deleting node N
If N is a leaf
Set the reference in N’s parent to null
If N has only one child
Let N’s parent adopt N’s child
If N has two children
Locate another node M that is easier to remove from the tree than the node N
Copy the item that is in M to N
Remove the node M from the tree
Node M can be
inorder successor – the leftmost node in Bob’s right subtree, or
Inorder predecessor – the rightmost node in Bob’s left subtree.
ADT二进制搜索树操作的算法:检索(Algorithms for the Operations of the ADT Binary Search Tree: Retrieval)
可以通过优化搜索算法来实现检索操作
如果项目存在,则返回带有所需搜索键的项目
否则,返回null引用
二叉搜索树的遍历与二叉树的遍历相同
Retrieval operation can be implemented by refining the search algorithm
Return the item with the desired search key if it exists
Otherwise, return a null reference
Traversals for a binary search tree are the same as the traversals for a binary tree
基于参考的ADT二进制搜索树实现(A Reference-Based Implementation of the ADT Binary Search Tree)
BinarySearchTree
扩展BinaryTreeBasis
从BinaryTreeBasis继承以下内容•isEmpty()
makeEmpty()
getRootItem()
构造函数的使用
TreeIterator
可与BinarySearchTree一起使用
BinarySearchTree
Extends BinaryTreeBasis
Inherits the following from BinaryTreeBasis • isEmpty()
makeEmpty()
getRootItem()
The use of the constructors
TreeIterator
Can be used with BinarySearchTree
二叉搜索树操作的效率(The Efficiency of Binary Search Tree Operations)
具有七个节点的最大高度二叉树
检索,插入或删除的最大比较次数是树的高度
二叉搜索树的最大和最小高度
n是具有n个节点的二叉树的最大高度
A maximum-height binary tree with seven nodes
The maximum number of comparisons for a retrieval, insertion, or deletion is the height of the tree
The maximum and minimum heights of a binary search tree
n is the maximum height of a binary tree with n nodes
ADT二叉搜索树的基于引用的实现的检索,插入,删除和遍历操作的顺序
The order of the retrieval, insertion, deletion, and traversal operations for the reference-based implementation of the ADT binary search tree