当前课程知识点:数据结构(下) > 第七章 二叉搜索树 > (a)概述 > 07A-3 有序性
在接下来的讨论中
为了简洁起见
我们都将二叉搜索树
Binary Search Tree
简称作BST
那么既然二叉搜索树
首先是二叉树
其中的基本组成单位
也就是节点
而且每个节点中都各自存有
一个词条
另外我们刚才也讲过
每一个词条
也都唯一的对应于某一个关键码
因此同样是为了便于叙述和讲解
在此后只要不致引起混淆
我们往往会将节点 词条以及关键码
这三个概念直接等同起来
相互指代
而不加严格地区分
那么相对于一般的Binary Tree
BST究竟有什么特点和特征呢?
概括起来只有一条
也就是处处满足顺序性
所谓顺序性具体来说就是
相对于某一个节点V而言
如果它的左后代存在
那么所有的左后代
都不致比它更大
对称地 如果它的右后代存在
那么所有的右后代
都不致比它更小
来看两个反例
首先这样一棵树
并非二叉搜索树
因为很明显
相对于这个节点而言
它已经拥有三个孩子
不再是二叉树
更谈不上是二叉搜索树
再来看这样一个反例
我们可以看到
相对于节点3而言
它的某一个右后代
也就是2
要比它严格地更小
这一点违反了BST的基本要求
所以它并非一棵BST
尽管相对于其它的节点而言
顺序性的确都是满足的
因此如果我们将这个关键码2
适当地替换为一个稍大的关键码
比如说7
那么就可以使之成为一棵名副其实的BST
当然BST还有很多边界情况
比如只含单个节点的二叉树
必然是BST
类似地
即便其中只包含一个单分支
只要它在此局部满足顺序性
那么依然可以称作是一棵BST
关于顺序性 这样一个定义
是非常简明而且准确的
你或许可能会尝试着
对这样一种定义
略做调整
比如像这样
将后代替换为孩子
那么这种定义与标准的定义
是否是等效的呢?
同学们不妨在课后做一思考
如果你认为它是等效的
不妨尝试地给出一个证明
如果不是 给出一个反例
再进一步地
依然是出于简化的考虑
我们还需补充另一条强制的规定
也就是在树中所存的词条
不得彼此重复
这样我们所有的不小于
都可以直接简化为大于
而所有的不大于都可以
直接简化为小于
然而这种假设
在实际应用中极不自然
同时在算法设计方面
也是无需回避的一个问题
实际上我们完全可以
在接下来所要介绍的方法的基础上
略做扩充
使得BST能够支持同时存在的
多个雷同词条
在教材所配套的习题解析中
对相关的技术进行了介绍
同学们不妨在课后独立地阅读
相关的几道习题
最后回过头来重新审视
如上所定义的顺序性
不难发现
这只是一个局部性的特征
那么这样一种局部性的特征
对于BST整体而言
又意味着什么呢?
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试