第五章 树与二叉树
树
树的基本概念
- 空树,非空树
- 非空树特性
树的基本概念
- 数学描述
- 子树,子树之间互不相交
- 树是一种递归定义的结构,任何一个树都可以看做是由根节点和若干个不相交的子树所组成的
树形逻辑结构的应用
结点之间的关系描述
- 祖先结点:从一个节点出发一直往上走,直到根节点,所遇到的所有节点都是祖先结点
- 子孙结点:从一个节点出发,下面所有长出的节点都是他的子孙结点
- 双亲结点:一个结点的直接前驱,就是双亲结点,也叫父结点
- 孩子结点:一个结点的直接后继,叫孩子结点
- 兄弟结点:几个结点来自同一个父结点,他们之间就是兄弟结点
- 堂兄弟结点:几个结点父结点不同,但是爷爷结点相同,之间就是堂兄弟节点;堂兄弟结点都在同一层
结点、树的属性描述
- 我们默认结点的层次从1开始,也就是父结点为第一层
- 有些地方叫法从0层开始,考试注意审题
有序树VS无序树 - 取决于用树来做什么,是否需要结点的子树从左到右满足次序
树vs森林
- 树和森林的转换也是考点
- 树可以是空树,森林也可以为空森林
知识点小结
树的常考性质
考点1:结点数=总度数+1
考点2:度为m的树、m叉树的区别
考点2:度为m的树第i层,至多有m的i-1次方个结点
考点4:高度为h的m叉树,至多有几个结点,等比数列求和
考点5:
考点6:有n个结点的m叉树,最小高度为?让树尽可能的宽,参考前面的等比数列求和公式
知识点小结
二叉树–定义、基本术语
高频考点
二叉树的基本概念
二叉树的五种状态
考点:几个特殊的二叉树–形态上
- 满二叉树,完全二叉树;满二叉树相当于特殊的完全二叉树
- 完全二叉树如果不满的话,缺少的一定是最后面的几个叶子节点,前面的一定是按顺序排下来的,不能有跳跃
- 如果完全二叉树的某个结点只有一个孩子,那么一定是左孩子
几个特殊的二叉树–功能上
几个特殊的二叉树–平衡二叉树
- 平衡二叉树能有更高的搜索效率
- 因为平衡二叉树生长的时候尽可能长的宽,搜索的时候才能尽可能减少深度,减少对比的次数
知识点小结
二叉树–常考性质
常见考点1:
- 叶子结点比度为2的结点数多一个
常见考点2
常见考点3
- 前面证明过
完全二叉树考点1
- 要能自己推导,而不是死记硬背
完全二叉树考点2
知识点小结
二叉树–存储结构
二叉树的顺序存储
几个重要考点的基本操作
- 结点编号的关系
如果不是完全二叉树,原有的编号顺序无法反应结点的逻辑关系
- 可以仍然按照想象中的完全二叉树进行编号,不存在的结点去掉即可
- 但是不能再通过结点总数来判断左右孩子是否存在,而是用isempty来判断
- 显而易见,这样存储,会有大量的空间闲置浪费
最坏情况
- 因此二叉树的顺序存储结构只适合存储完全二叉树
- 实际中很少这么用
二叉树的链式存储–二叉链表
- n个结点就会有2n个指针域
- n个结点,每个结点的头上都有一个指针,除了根节点,因此共有n-1个指针有指向
- 所以二叉树链表共有n+1个空链域
二叉链表代码实现
二叉链表存储
- 找孩子非常容易,但是找父节点只能遍历寻找
- 也可以个结点再添加一个指针,用来存放父节点,也成为三叉链表
- 考试一般喜欢考二叉链表,然后遍历查找父节点
知识点小结
- 顺序存储的情况,如果结点从0开始编号,如何调整
- 链式存储的情况,需要注意空链域
二叉树–先序、中序、后序遍历
什么是遍历
二叉树的递归特性
二叉树遍历练习
- 给定二叉树,确定前序中序后序遍历顺序是常见考点
先序遍历–代码实现
中序遍历–代码实现
后序遍历–代码实现
空间复杂度
- 先脑补出空节点
- 红色表示第一次访问该结点,绿色表示第二次经过该结点,紫色表示第三次经过该结点
- 不难发现,每个节点都会被路过三次
应用
求树的深度
知识点小结
二叉树–层序遍历
层序遍历算法思想
- 初始化辅助队列
- 根结点入队
- 队列不空则循环
- 队列头结点出队
- 访问出队的节点
- 出队的节点如果有左右孩子,则入队
- 重新判断是否循环
代码实现
- 辅助队列使用链队列,因为不清楚需要使用多长的辅助队列
- 辅助队列只需要保存结点的指针即可,无需保存结点数据,节省空间
知识点小结
由遍历序列构造二叉树
不同二叉树的遍历序列
结论
- 若只给出一颗二叉树的前序、中序、后序、层序中的一种排列,不能唯一确定一颗二叉树
- 需要同时提供前序+中序、后序+中序、层序+中序两种排列,才能确定一颗二叉树
- 必须包含中序遍历序列
如果给出 前序+中序 遍历序列
- 前序遍历的第一个结点一定是跟结点
- 在中序遍历中找到根结点的位置,根结点左侧的都是左子树的,根结点右侧的都是右子树的
- 回到前序遍历序列,已知了根结点,左子树的结点,身下的就是右子树的结点
BDC为左子树的结点,由前序遍历序列可知,D一定为左子树的根结点,以此类推,往下找
再看一个例子