当前课程知识点:数据结构(下) > 第七章 二叉搜索树 > (a)概述 > 07A-4 单调性
尽管此前所定义的顺序性
只不过是处处局部的一个特征
但是正如我们马上就会看到的
这样一种局部性的特征
居然可以导出BST
整体的全局性的某种特征
具体来说
也就是所谓的单调性
实际上只要考查BST的中序遍历序列
就会发现它必然是单调的
我们来看下面这样一个实例
在此你不妨稍事暂停
以确认在树中的每一个顶点处
顺序性都是满足的
好了
接下来 我们不妨沿着中序遍历序列
浏览所有节点
我们可以看到
所有这些节点
的确是以它们的关键码为序
单调排列
实际上 任何一棵BST
都具有这样的一个特征
反过来 具有这一特征的任何二叉树
也必然同时是一棵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)希尔排序:逆序对
-本章测验
--本章测试