当前课程知识点:数据结构(上) > 第五章 二叉树 > (a)树 > 05A-7 深度+层次
以上我们看到,对于任何一个节点而言
它所对应的那条通往根的路径
必然是唯一的
反之
再按照刚才的递归嵌套形式
构成出它所属于的那棵大树的过程中
任何一个节点也必将在某一个时刻
对应于以它为根的那棵子树
既然这三个概念就是同一件事情
所以在不致引起歧义的情况下
我们可以往往将它们混淆起来
彼此指代
也就是说the path from root to v
可以直接简化为the path v
而the subtree rooted at v
也可以直接地简化为the subtree v
既然任何一个节点都会以它所对应的
那条通路的长度作为指标
而这样一个指标也很好地体现了
任何一个节点v
从根节点开始向下深入的程度
因此我们也将v所对应的
这条路径的长度 也就是它的指标
形象地称作点v在这棵树中的深度
任何一个顶点
也因此具有了一个深度的指标
那么继续考察任何一个顶点
所对应的这条通路
相对于某一个特定的顶点
在它所对应的那条通路上
如果还存在其它的点
那么这个点
就称作是它的祖先ancestor
反过来呢
这个点也就称作是它的祖先的后代
descendent
当然 我们这里一般所定义的祖先和后代
都是包括顶点自身的
如果需要将自身排除掉
那么我们更严格地
也称其为真祖先或者是真后代
当然 在不致引起歧义的情况下
我们也往往会将真字省略掉
不难看出 对于任何一个节点而言
在它以上的任何一个层次上
它必然只有唯一的一个祖先
而反过来 对于任何一个节点而言
它在任何一个层次上的后代
却未必是唯一的
比照我们此前的向量和列表等线性结构
如果祖先对应于前驱
而后代对应于后继
那我们就会发现
前驱的唯一性 在这个意义上讲
依然是保持的
但是后继的唯一性却不再保持
因此从这个意义上讲
也应该将树结构称作是半线性结构
稍后我们会看到 对于图结构而言
这两条唯一性都是不能满足的
所以我们直接地称它为非线性结构
也是再合适不过的了
当然
全树的根节点
也应该是任意节点的祖先
或者说是它们的公共祖先
它所对应的那条路径的长度为零
所以我们说它所对应的深度
也自然就是零
树根节点没有祖先
而反过来 有些节点也会没有后代
那么这样一类节点
我们也形象地称之为叶节点
或者简称为叶子
请注意 在树中叶子节点必然是存在的
否则的话 我们沿着深度
不断地下行
总能够前进
这就会得出一个很荒诞的结论
也就是说 这棵树中
将包含无穷个节点
既然节点的数目有限
那么有限集中必然存在最值
我们考虑其中的最大者
也就是形象地来说 其中最深的那个节点
当然这个节点必然是一批叶子
在这样一个图中
叶子节点应该出现在这样的位置
而这种叶子节点
所对应的那个最大的深度
我们也形象地称之为这棵树的高度
当然树的高度这一概念
也可以推广至其中的任何一棵子树
如此定义的子树高度
也称作它的根节点的高度
所以任何一棵子树的高度
就是它的根节点的高度
所以反过来 全树的高度也可以当作是
全树根节点的高度
这几个概念比较容易混淆
所以我建议同学们脑子里
记下我们这里所绘的这张图
你就很容易搞清楚什么叫作全树的高度
子树的高度
以及其中任何一个节点
包括根节点的高度
需要特别说明的是
对于退化的树
也就是只有单个节点的
这样一棵树
不难发现
它的高度应该是零
那么再进一步的呢?
一个节点都不包含的树呢?
也就是我们所谓的空树呢?
为了一致起见
我们不妨将它的高度取作是-1
这一点现在你还不容易理解
稍后我们就会发现
它是非常自然的一个设定
现在我们回过头来观察
树中的任何一个一般性的节点v
按照我们刚才的介绍
任何这样的一个点
都既有深度的指标
同时也有高度的指标
那么我们也不难证明这样一个事实
也就是任何一个节点的高度
与深度之和绝对不会超过全树的高度
在我们所建议的这幅图中
也就是说
对于任何的
这样一个顶点
它的深度与它的高度之和
不会超过全树的高度
从图中非常好理解
尽管我们在此把严格的证明省略掉了
那么有一点倒是希望大家
在课后进一步思考的
也就是说 这个不等号
在什么时候取等号?
它的条件是什么?
你所给的条件是否是充要条件?
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验