搜索树
搜索树的基本操作方法

搜索树的基本操作方法
搜索树是一种有序的二叉树数据结构,常用于存储和搜索数据。
基本的操作方法包括插入、删除和查找。
1. 插入操作(insert):向搜索树中插入新节点。
从根节点开始遍历搜索树,如果待插入节点值小于当前节点值,则继续向左子树搜索;如果待插入节点值大于当前节点值,则继续向右子树搜索;直到找到一个空位置,将待插入节点插入到该位置。
2. 删除操作(delete):删除指定节点。
先在搜索树中找到待删除节点,根据不同情况进行处理:
a) 如果待删除节点没有子节点,直接删除它。
b) 如果待删除节点只有一个子节点,将子节点替代待删除节点的位置。
c) 如果待删除节点有两个子节点,则寻找待删除节点的前驱节点或后继节点来替代该节点。
前驱节点是指比待删除节点值小的最大节点,后继节点是指比待删除节点值大的最小节点。
可以选择使用前驱节点或后继节点来替代待删除节点。
3. 查找操作(search):在搜索树中查找指定值的节点。
从根节点开始遍历搜索树,如果要查找的值等于当前节点值,则返回该节点;如果要查找的值小于当前节点值,则继续向左子树搜索;如果要查找的值大于当前节点值,则继续向右子树搜索。
如果找到了匹配节点,则返回节点;如果搜索到空节点(未找到匹配节点),则返回空值。
以上是搜索树的基本操作方法,对于不同的搜索树实现,可能会有一些其他特定的操作方法。
二叉搜索树定义

二叉搜索树定义二叉搜索树(Binary Search Tree,简称BST)是一种常用的数据结构,它是一个二叉树,其中每个节点的值都大于其左子树中的任意节点的值,且小于其右子树中的任意节点的值。
BST的定义如下:1. 每个节点最多有两个子节点,分别为左子节点和右子节点;2. 若某节点的左子树不为空,则其左子树中的每个节点值都小于该节点的值;3. 若某节点的右子树不为空,则其右子树中的每个节点值都大于该节点的值;4. 没有重复节点的情况下,所有左子树的节点值都小于右子树的节点值。
下面我们来详细讨论BST的特性和示例。
BST的特性:1. 在BST中,对于任意一个节点,其左子树中的所有节点都小于它的值,右子树中的所有节点都大于它的值。
2. 由于BST是一个二叉树,因此对于每个节点,其左子树和右子树都是BST。
3. BST的中序遍历结果是一个递增的有序序列。
4. 对于BST的搜索、插入和删除操作,平均时间复杂度为O(logn),其中n为树中节点的数量。
示例:下面是一个示例的BST:```5/ \3 7/ \ \2 4 9```在这个示例中,根节点的值为5,它的左子节点为3,右子节点为7。
左子节点的左子节点为2,右子节点为4。
右子节点的右子节点为9。
根据BST的定义,我们可以观察到该树的每个节点的值都符合左<根<右的规律。
对于这个BST,其中序遍历的结果为2, 3, 4, 5, 7, 9,它们正好是递增的有序序列。
BST的使用场景:BST常用于需要快速搜索、插入和删除操作的场景,比如在数据库中存储有序数据,或者在构建字典、索引等数据结构时都可以使用BST。
在红黑树和AVL树等平衡二叉搜索树中,也是以BST为基础进行的扩展和优化。
总结:二叉搜索树是一种常用的数据结构,其定义明确了每个节点与其子节点的大小关系。
在BST中,左子树的节点值都小于根节点的值,右子树的节点值都大于根节点的值。
BST的特性使得它非常适用于搜索、插入和删除等操作,同时其中序遍历结果是有序的。
动态规划-最优二叉搜索树

动态规划-最优⼆叉搜索树摘要: 本章介绍了⼆叉查找树的概念及操作。
主要内容包括⼆叉查找树的性质,如何在⼆叉查找树中查找最⼤值、最⼩值和给定的值,如何找出某⼀个元素的前驱和后继,如何在⼆叉查找树中进⾏插⼊和删除操作。
在⼆叉查找树上执⾏这些基本操作的时间与树的⾼度成正⽐,⼀棵随机构造的⼆叉查找树的期望⾼度为O(lgn),从⽽基本动态集合的操作平均时间为θ(lgn)。
1、⼆叉查找树 ⼆叉查找树是按照⼆叉树结构来组织的,因此可以⽤⼆叉链表结构表⽰。
⼆叉查找树中的关键字的存储⽅式满⾜的特征是:设x为⼆叉查找树中的⼀个结点。
如果y是x的左⼦树中的⼀个结点,则key[y]≤key[x]。
如果y是x的右⼦树中的⼀个结点,则key[x]≤key[y]。
根据⼆叉查找树的特征可知,采⽤中根遍历⼀棵⼆叉查找树,可以得到树中关键字有⼩到⼤的序列。
介绍了⼆叉树概念及其遍历。
⼀棵⼆叉树查找及其中根遍历结果如下图所⽰:书中给出了⼀个定理:如果x是⼀棵包含n个结点的⼦树的根,则其中根遍历运⾏时间为θ(n)。
问题:⼆叉查找树性质与最⼩堆之间有什么区别?能否利⽤最⼩堆的性质在O(n)时间内,按序输出含有n个结点的树中的所有关键字?2、查询⼆叉查找树 ⼆叉查找树中最常见的操作是查找树中的某个关键字,除了基本的查询,还⽀持最⼤值、最⼩值、前驱和后继查询操作,书中就每种查询进⾏了详细的讲解。
(1)查找SEARCH 在⼆叉查找树中查找⼀个给定的关键字k的过程与⼆分查找很类似,根据⼆叉查找树在的关键字存放的特征,很容易得出查找过程:⾸先是关键字k与树根的关键字进⾏⽐较,如果k⼤⽐根的关键字⼤,则在根的右⼦树中查找,否则在根的左⼦树中查找,重复此过程,直到找到与遇到空结点为⽌。
例如下图所⽰的查找关键字13的过程:(查找过程每次在左右⼦树中做出选择,减少⼀半的⼯作量)书中给出了查找过程的递归和⾮递归形式的伪代码:1 TREE_SEARCH(x,k)2 if x=NULL or k=key[x]3 then return x4 if(k<key[x])5 then return TREE_SEARCH(left[x],k)6 else7 then return TREE_SEARCH(right[x],k)1 ITERATIVE_TREE_SEARCH(x,k)2 while x!=NULL and k!=key[x]3 do if k<key[x]4 then x=left[x]5 else6 then x=right[x]7 return x(2)查找最⼤关键字和最⼩关键字 根据⼆叉查找树的特征,很容易查找出最⼤和最⼩关键字。
人工智能中的蒙特卡罗树搜索算法

人工智能中的蒙特卡罗树搜索算法随着人工智能的不断发展,各种算法也不断涌现。
其中,蒙特卡罗树搜索算法是一种在游戏和决策中广泛应用的算法。
本文将会介绍蒙特卡罗树搜索算法的基本原理和应用场景。
1. 蒙特卡罗树搜索算法的基本原理蒙特卡罗树搜索算法是一种基于蒙特卡罗模拟的搜索算法,能够在感知时间内找到每个可能的行动,以及每个行动的可能结果。
该算法依赖于随机化计算,通过大量模拟实验获取每个决策的成功率及其期望回报。
蒙特卡罗树搜索算法是通过创建搜索树,不断拓展每个节点来实现的。
该算法的基本步骤如下:首先,我们需要构建搜索树。
搜索树的根节点表示我们的当前状态,每个子节点表示我们执行某一行为后的状态。
其次,我们需要进行蒙特卡罗模拟。
在每个节点处,我们需要使用随机数生成器模拟一些行动,通过大量模拟实验获取每个决策的成功率及其期望回报。
随后,我们要从当前的节点开始扩展搜索,以生成搜索树的枝条。
我们在树叶处运行模拟,所得的奖励值将传递回已经访问的各级节点。
最后,根据得到的每个子节点期望价值,我们可以选择选择最优的子节点行为。
当我们选择子节点时,需要计算每个子节点的平均值,并考虑平均值约束的置信度,以便更好地选择下一个子节点。
2. 蒙特卡罗树搜索算法的应用场景蒙特卡罗树搜索算法具有广泛的应用场景。
最常见的应用之一是在游戏中,特别是在棋类游戏中。
例如,中国象棋和围棋都可以通过蒙特卡罗树搜索算法进行智能对弈。
此外,在决策问题中也可以采用蒙特卡罗树搜索算法。
例如,在互联网广告中,需要确定哪些广告应该在哪些位置上展示,以最大化投资回报。
蒙特卡罗树搜索算法可以通过生成树来搜索各种广告组合,以找到最佳结果。
总之,蒙特卡罗树搜索算法已经成为了人工智能中的重要算法之一。
它的基本原理是通过随机化计算,获取每个决策的成功率及其期望回报,并通过搜索树在时间感知的条件下找到每个可能的行动以及每个行动的可能结果。
在游戏、决策等领域中广泛应用。
b+树查找原理

B+树(B+-tree)是一种平衡的多路搜索树,广泛应用于数据库和文件系统等领域。
B+树的特点是在每个内部节点上存储一定数量的关键字,并将节点分为多个子树。
通过这种方式,B+树能够保持相对平衡,使得查找、插入和删除等操作的时间复杂度接近于O(log n)。
B+树查找原理如下:
1.从根节点开始,按照B+树的结构特性,沿着树的路径向下查找。
2.根据待查找的关键字与节点中关键字的比较结果,选择合适的子树进行查
找。
3.重复步骤2,直到找到目标节点或者查找到叶子节点。
4.如果在叶子节点上找到了目标关键字,则返回该关键字。
如果未找到,则
返回空或者表示查找失败。
B+树的查找过程是自顶向下的,每次查找都会访问一定数量的节点。
在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中,并且各叶节点指针进行连接。
这种设计使得B+树在查找过程中能够快速定位到目标关键字所在的叶子节点,并利用指针连接关系进一步查找其他相关记录。
因此,B+树的查找性能相对稳定,不会出现像链表那样的最坏情况。
最优二叉搜索树

8
2 最优二叉搜索树
xal
wan wil wen wim wul xem yo xul yu m
zol zom
yon
zi
A
A代表其值处于 代表其值处于wim和wul之间的可能关键码集合 代表其值处于 和 之间的可能关键码集合
9
2 最优二叉搜索树
在二叉搜索树中搜索一个元素x 在二叉搜索树中搜索一个元素
1 2 3 2 (c) (d) (a) (b) (e) 1 3 1 2 1 3 2 1 2 3
• 设每个内、外结点检索的概率相同:pi=qi=1/7, 设每个内、外结点检索的概率相同: , 求每棵树的平均比较次数(成本)。 求每棵树的平均比较次数(成本)。 • 若P1=0.5, P2=0.1, P3=0.05, q0=0.15, q1=0.1, q2=0.05, q3=0.05,求每棵树的平均比较 , 次数(成本)。 次数(成本)。 13
2 最优二叉搜索树
在检索过程中,每进行一次比较,就进入下面一层, 在检索过程中,每进行一次比较,就进入下面一层, • 对于成功的检索,比较的次数就是所在的层数加 。 对于成功的检索,比较的次数就是所在的层数加1。 • 对于不成功的检索,被检索的关键码属于那个外部结 对于不成功的检索, 点代表的可能关键码集合, 点代表的可能关键码集合,比较次数就等于此外部结 点的层数。 点的层数。
6
2 最优二叉搜索树
2、最优二叉搜索树 、
存在的两个问题 1 在实际中也会遇到不成功检索的情况。 在实际中也会遇到不成功检索的情况。 不成功检索的情况 2 在实际中,不同标识符会有不同的检索概率。 在实际中,不同标识符会有不同的检索概率。 不同的检索概率 • 对给定的标识符集合,希望给出构造二分搜索 对给定的标识符集合, 树的方法,使得所构造的二分搜索树具有最优 树的方法,使得所构造的二分搜索树具有最优 的性能。 的性能。
AVL树数据结构的特点与使用场景

AVL树数据结构的特点与使用场景AVL树是一种自平衡的二叉搜索树,它在插入或删除节点时会通过旋转操作来保持树的平衡,以确保树的高度始终保持在较小的范围内。
AVL树得名于其发明者Adelson-Velsky和Landis,是一种高度平衡的二叉搜索树,具有快速的查找、插入和删除操作的特点。
在本文中,将介绍AVL树数据结构的特点以及其在实际应用中的使用场景。
一、AVL树的特点1. 自平衡性:AVL树是一种自平衡的二叉搜索树,任何时刻,AVL 树的任意节点的左右子树的高度差不超过1。
当插入或删除节点后,AVL树会通过旋转操作来保持树的平衡,以确保树的高度始终保持在较小的范围内,从而保证了查找、插入和删除操作的时间复杂度为O(log n)。
2. 高度平衡:由于AVL树的自平衡性,使得树的高度相对较低,这样在进行查找操作时,平均查找时间较短,提高了搜索效率。
3. 严格平衡:AVL树是一种严格平衡的二叉搜索树,任何时刻,AVL树的任意节点的左右子树的高度差不超过1,这种严格平衡性保证了AVL树的高度始终保持在较小的范围内,使得其在各种操作下都能保持高效性。
4. 插入和删除操作复杂度低:由于AVL树的自平衡性,插入和删除节点时需要进行旋转操作来保持树的平衡,但这些旋转操作的时间复杂度为O(log n),因此插入和删除操作的复杂度仍然为O(log n),保证了操作的高效性。
二、AVL树的使用场景1. 数据库索引:在数据库系统中,AVL树常被用作索引结构,用于加速数据库的查找操作。
由于AVL树具有快速的查找、插入和删除操作,能够保持树的平衡,因此在数据库索引中得到广泛应用。
2. 编辑器中的自动补全功能:在文本编辑器或代码编辑器中,常常需要实现自动补全功能,AVL树可以用来存储单词或代码片段,通过快速查找实现自动补全功能,提高编辑效率。
3. 路由表:在网络路由中,需要快速查找目标地址对应的路由信息,AVL树可以用来存储路由表,通过快速查找实现高效的路由转发,提高网络传输效率。
B树与B树数据结构中的多路搜索树

B树与B树数据结构中的多路搜索树B树是一种常见的数据结构,被广泛应用于数据库和文件系统中,用于高效地存储和检索大量数据。
B树是一种多路搜索树,其特点是每个节点可以拥有多个子节点,相比于二叉搜索树,B树能够减少树的高度,减少查找所需的IO次数,提高检索效率。
一、B树的基本概念B树是一种平衡的多路搜索树,其每个节点可以包含多个子节点。
B树的定义如下:1. 根节点至少有两个子节点。
2. 每个非叶子节点有m个子节点,其中m满足:[m/2] ≤ 子节点个数≤ m。
3. 每个非叶子节点的子节点个数比关键字个数多1。
4. 所有叶子节点都在同一层。
B树的节点结构包含关键字和指向子节点的指针。
通过这种结构,B树能够在每个节点存储更多的关键字,减少树的高度,提高检索效率。
二、B树的插入操作在B树中插入一个新的关键字时,需要按照以下步骤进行:1. 从根节点开始,沿着树向下查找插入位置。
2. 如果插入位置所在节点的关键字数量未达到上限,则直接插入。
3. 如果插入位置所在节点的关键字数量已达到上限,则进行节点分裂操作:a. 将该节点的关键字按中间位置分成两部分,中间位置的关键字上移至父节点。
b. 将左右两部分关键字分别作为两个新节点的关键字。
c. 更新父节点的指针,指向新的子节点。
4. 重复以上步骤,直到插入到叶子节点。
B树的插入操作保持了树的平衡性,确保了树的高度始终在可接受范围内。
三、B树的删除操作在B树中删除一个关键字时,需要按照以下步骤进行:1. 从根节点开始,沿着树向下查找待删除关键字所在位置。
2. 如果待删除关键字在非叶子节点上,则找到其前驱或后继关键字替换,并递归删除替换关键字。
3. 如果待删除关键字在叶子节点上:a. 直接删除该关键字。
b. 如果删除后节点关键字数量小于下限,则进行节点合并操作:- 如果相邻兄弟节点关键字数量大于下限,则从兄弟节点借一个关键字。
- 如果相邻兄弟节点关键字数量也小于下限,则进行节点合并,合并后删除父节点中的关键字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9/10/2012
30
9/10/2012
31
9/10/2012
32
高度不平衡的二叉搜索树 高度平衡的二叉搜索树
9/10/2012
33
平衡
当确定搜索树的高度总是O(logn)时, 能够保证每个搜索树操作所占用的时 间为O(logn)。 高度为O(logn)的树称为平衡树 (balanced tree)。
根据AVL树的定义,任一结点的平衡因子 只能取 -1,0和 1。 如果一个结点的平衡因子的绝对值大于1, 则这棵二叉搜索树就失去了平衡,不再 是AVL树。
如果一棵二叉搜索树是高度平衡的,它就 成为 AVL树。如果它有 n 个结点,其高 度可保持在O(log2n),平均搜索长度也可 保持在O(log2n)。
二叉搜索树的插入
插入新结点88 每次结点的插入,都要从根结点出发搜索插 入位置,然后把新结点作为叶结点插入。
9/10/2012 14
二叉搜索树的插入
9/10/2012
15
输入数据,建立二叉搜索树的过程
输入数据序列 { 53, 78, 65, 17, 87, 09, 81, 45, 23 }
9/10/2012
22
9/10/2012
9/10/2012
23
二叉搜索树的删除
如果p有两个非空子树。 只需将该元素替换为它的左子树中的 最大元素或右子树中的最小元素。
9/10/2012
249/10/201225二叉搜索树的删除
注意,必须确保右子树中的最小元素以及 左子树中的最大元素或者在没有子树的节 点中,或者在只有一个子树的节点中。 可以按下述方法来查找到左子树中的最大 元素:首先移动到子树的根,然后沿着各 节点的右孩子指针移动,直到右孩子指针 为0为止。 类似地,也可以找到右子树中的最小元素: 首先移动到子树的根,然后沿着各节点的 左孩子指针移动,直到左孩子指针为0为止。
16
同样 3 个数据{ 1, 2, 3 },输入顺序不同,建立 起来的二叉搜索树的形态也不同。这直接影响到 二叉搜索树的搜索性能。 如果输入序列选得不好,会建立起一棵单支树, 使得二叉搜索树的高度达到最大,这样必然会降 低搜索性能。 {2, 1, 3} {1, 2, 3} {1, 3, 2} {2, 3, 1} {3, 1, 2} {3, 2, 1}
26
9/10/2012
9/10/2012
27
9/10/2012
28
1、查找
2、调整
若有俩孩子,则找左子树最大元素,即最
右边的元素(s),用该元素的值替换要删 除的节点(p)的值,问题转化为删除s,此时 s必然最多只有一个孩子(且是左儿子)
最多只有一个孩子,用孩子替换要删除的
节点
9/10/2012 29
抽象数据类型BSTree{ 实例 二叉树,每一个节点中有一个元素, 该元素有一个关键值域;所有元素 的关键值各不相同;任何节点左子 树的关键值小于该节点的关键值; 任何右子树的关键值大于该节点的 节点关键值。
9/10/2012 7
二叉搜索树的抽象数据类型描述
操作 Create():创建一个空的二叉搜索树 Search(k,e):将关键值为k的元素返回到e 中;如果操作失败则返回false,否则返 回true Insert(e):将元素e插入到搜索树中 Delete(k,e):删除关键值为k的元素并且 将其返回到e中 Ascend():按照关键值的升序排列输出所 有元素 ??? }
9/10/2012 44
观察
从根节点往下移动寻找插入新元素的 位置时,能够确定节点A。 bf(A)在插入前的值既可以是-1,也可 以是1。
9/10/2012
45
观察
设X 是最后一个具有这样平衡因子的 节点。 插入32。
9/10/2012
46
观察
插入28或50 插入10,14,16或19
9/10/2012
47
观察
如果节点X不存在,那么从根节点至新 插入节点途中经过的所有节点在插入 前的平衡因子值都是0。 由于插入操作只会使平衡因子增/减-1, 0或1,并且只有从根节点至新插入节 点途中经过的节点的平衡因子值才会 被改变,所以插入后,树的平衡不会 被破坏。 因此,如果插入后的树是不平衡的, 那么X就一定存在。
9/10/2012 40
平衡因子
9/10/2012
41
AVL搜索树的搜索
同普通二叉搜索树。 复杂性?
9/10/2012
42
AVL搜索树的插入
将一个新元素插入到AV L树中时,若 得到的新树中有一个或多个节点的平 衡因子的值不是-1,0或1,那么就说 新树是不平衡的。 通过移动不平衡树的子树来恢复树的 平衡。
二叉搜索树?
9/10/2012
5
带索引的二叉搜索树
普通的二叉搜索树 每个节点中添加了一个leftsize域,表示在以 其为根的子树中,他的排名 =左边元素个数 + 1
4 2 1 15 1 12
9/10/2012
20
1 25 18 1 30 1 2
3
30 1 48
5
2
6
二叉搜索树的抽象数据类型描述
Chapter11 Serch Trees
1.
2. 3. 4.
二叉搜索树(Binary Search) Trees AVL树(AVL Trees) 红-黑树(Red-Black Trees) B树(B-Trees)
9/10/2012
1
本章重点
1. 2. 3.
二叉搜索树 AVL树 B树
9/10/2012
9/10/2012
34
AVL树
1) 2)
定义 空二叉树是AVL树; 如果T是一棵非空的二叉树,TL 和TR 分别是其左子树和右子树,那么当T满 足以下条件时,T是一棵AVL树: TL和TR是AVL树; | hL - hR |≤1, hL 和hR 分别是左子 树和右子树的高度。
35
9/10/2012
9/10/2012 38
AVL树的描述
一般用链表方式来描述AVL树。 为简化插入和删除操作,为每个节点 增加一个平衡因子bf。节点x 的平衡 因子bf(x) 定义为: x 的左子树的高度-x 的右子树的高度 从AVL树的定义可以知道,平衡因子的 可能取值为?。
39
9/10/2012
结点的平衡因子balance (balance factor)
9
9/10/2012
二叉搜索树的搜索
要查找关键值为k的元素,那么先从根开始。 如果根为空,那么搜索树不包含任何元素, 查找失败,否则,将k与根的关键值相比较: 如果k小于根节点的关键值,那么就不必搜索 右子树中的元素,只要在左子树中搜索即可。 如果k大于根节点的关键值,则正好相反,只 需在右子树中搜索即可。 如果k等于根节点的关键值,则查找成功,搜 索终止。 在子树中的查找与此类似。
9/10/2012
43
分析
由插入操作导致产生不平衡树的几种现象: 1)不平衡树中的平衡因子的值限于-2,-1,0, 1和2。 2)平衡因子为2的节点在插入前平衡因子为1, 与此类似,平衡因子为-2的,插入前为-1。 3)从根到新插入节点的路径上,只有经过的 节点的平衡因子在插入后会改变。 4)假设A是新插入节点最近的祖先,它的平衡 因子是-2或2,那么,在插入前从A到新插 入节点的路径上,所有节点的平衡因子都 是0。
9/10/2012 20
二叉搜索树的删除
如果p是树叶; 丢弃树叶节点
9/10/2012
21
二叉搜索树的删除
1.
2.
如果p只有一个非空子树; 如果p没有父节点(即p是根节点),则 将p丢弃,p的唯一子树的根节点成为 新的搜索树的根节点。 如果p有父节点pp,则修改pp的指针, 使得pp指向p的唯一孩子,然后删除节 点p。。
48
9/10/2012
观察
如果插入后bf(X)=0,那么以X为根节 点的子树的高度在插入前后是相同的。
9/10/2012
49
观察
例如,如果插入前的高度是h,且bf(X)为1, 那么,在插入前,X的左子树的高度XL是h1,右子树的高度XR是h-2。由于平衡因子变 为0,所以必须在XR中作插入,得到高度为 h-1的新子树X‘R。 由于从X到新插入节点途中遇到的所有节点 在插入前的平衡因子均为0,所以X'R的高 度必须增加到h-1。 X的高度仍保持为h,X的祖先的平衡因子在 插入前后保持相同,所以树的平衡被保持 住了。
9/10/2012 12
二叉搜索树的插入
在二叉搜索树中插入一个新元素e,首 先要验证e的关键值与树中已有元素的 关键值是否相同,这可以通过用e的关 键值对二叉树进行搜索来实现。 如果搜索不成功,那么新元素将被插 入到搜索的中断点。 如果搜索成功,那么新元素将不被插 入。
13
9/10/2012
9/10/2012 8
带索引的二叉搜索树的抽象数据类型描述
抽象数据类型IndexedBSTree{ 实例 除每一个节点有一个LeftSize域以外,其他与BSTree相同 操作 Create():产生一个空的带索引的二叉搜索树 Search(k,e):将关键值为k的元素返回到e中;如果操作 失败返回false,否则返回true IndexSearch(k,e):将第k个元素返回到e中 Insert(e):将元素e插入到搜索树 Delete(k,e):删除关键值为k的元素并且将其返回到e中 IndexDelete(k,e):删除第k个元素并将其返回到e中 Ascend():按照关键值的升序排列输出所有元素 }