数据结构学习笔记(5.树与二叉树 6.图)

文章目录

  • 第五章 树与二叉树
    • 树的常考性质
    • 二叉树--定义、基本术语
    • 二叉树--常考性质
    • 二叉树--存储结构
    • 二叉树--先序、中序、后序遍历
    • 二叉树--层序遍历
    • 由遍历序列构造二叉树
    • 线索二叉树--概念
    • 二叉树的线索化--代码实现
    • 线索二叉树--如何找前驱、后继
    • 树--存储结构(普通的树)
    • 树、森林的遍历
    • 哈夫曼树
    • 并查集--2022新增考点
    • 并查集终极优化
  • 第六章 图
    • 图的基本概念
    • 图的存储--邻接矩阵法
    • 图的存储--邻接表法
    • 图的存储--十字链表、邻接多重表
    • 图的基本操作
    • 图的遍历--广度优先遍历(BFS)
    • 图的遍历--深度优先遍历(DFS)
    • 最小生成树
    • 最短路径--BFS算法
    • 最短路径---Dijkstra算法
    • 最短路径--Floyd算法
    • 有向无环图--描述表达式
    • 拓补排序
    • 关键路径

第五章 树与二叉树

数据结构学习笔记(5.树与二叉树 6.图)_第1张图片
树的基本概念

  • 空树,非空树
  • 非空树特性

数据结构学习笔记(5.树与二叉树 6.图)_第2张图片
树的基本概念

  • 数学描述
  • 子树,子树之间互不相交
  • 树是一种递归定义的结构,任何一个树都可以看做是由根节点和若干个不相交的子树所组成的

数据结构学习笔记(5.树与二叉树 6.图)_第3张图片
树形逻辑结构的应用
数据结构学习笔记(5.树与二叉树 6.图)_第4张图片
结点之间的关系描述

  • 祖先结点:从一个节点出发一直往上走,直到根节点,所遇到的所有节点都是祖先结点
  • 子孙结点:从一个节点出发,下面所有长出的节点都是他的子孙结点
  • 双亲结点:一个结点的直接前驱,就是双亲结点,也叫父结点
  • 孩子结点:一个结点的直接后继,叫孩子结点
  • 兄弟结点:几个结点来自同一个父结点,他们之间就是兄弟结点
  • 堂兄弟结点:几个结点父结点不同,但是爷爷结点相同,之间就是堂兄弟节点;堂兄弟结点都在同一层

数据结构学习笔记(5.树与二叉树 6.图)_第5张图片
结点、树的属性描述

  • 我们默认结点的层次从1开始,也就是父结点为第一层
  • 有些地方叫法从0层开始,考试注意审题
    数据结构学习笔记(5.树与二叉树 6.图)_第6张图片
    有序树VS无序树
  • 取决于用树来做什么,是否需要结点的子树从左到右满足次序

数据结构学习笔记(5.树与二叉树 6.图)_第7张图片
树vs森林

  • 树和森林的转换也是考点
  • 树可以是空树,森林也可以为空森林

数据结构学习笔记(5.树与二叉树 6.图)_第8张图片
知识点小结
数据结构学习笔记(5.树与二叉树 6.图)_第9张图片

树的常考性质

考点1:结点数=总度数+1
数据结构学习笔记(5.树与二叉树 6.图)_第10张图片
考点2:度为m的树、m叉树的区别
数据结构学习笔记(5.树与二叉树 6.图)_第11张图片
考点2:度为m的树第i层,至多有m的i-1次方个结点
数据结构学习笔记(5.树与二叉树 6.图)_第12张图片
考点4:高度为h的m叉树,至多有几个结点,等比数列求和
数据结构学习笔记(5.树与二叉树 6.图)_第13张图片
考点5:
数据结构学习笔记(5.树与二叉树 6.图)_第14张图片
考点6:有n个结点的m叉树,最小高度为?让树尽可能的宽,参考前面的等比数列求和公式
数据结构学习笔记(5.树与二叉树 6.图)_第15张图片
知识点小结
数据结构学习笔记(5.树与二叉树 6.图)_第16张图片

二叉树–定义、基本术语

高频考点
数据结构学习笔记(5.树与二叉树 6.图)_第17张图片
二叉树的基本概念
数据结构学习笔记(5.树与二叉树 6.图)_第18张图片
二叉树的五种状态
数据结构学习笔记(5.树与二叉树 6.图)_第19张图片
考点:几个特殊的二叉树–形态上

  • 满二叉树,完全二叉树;满二叉树相当于特殊的完全二叉树
  • 完全二叉树如果不满的话,缺少的一定是最后面的几个叶子节点,前面的一定是按顺序排下来的,不能有跳跃
  • 如果完全二叉树的某个结点只有一个孩子,那么一定是左孩子

数据结构学习笔记(5.树与二叉树 6.图)_第20张图片
数据结构学习笔记(5.树与二叉树 6.图)_第21张图片
几个特殊的二叉树–功能上
数据结构学习笔记(5.树与二叉树 6.图)_第22张图片
几个特殊的二叉树–平衡二叉树

  • 平衡二叉树能有更高的搜索效率
  • 因为平衡二叉树生长的时候尽可能长的宽,搜索的时候才能尽可能减少深度,减少对比的次数

数据结构学习笔记(5.树与二叉树 6.图)_第23张图片
知识点小结
数据结构学习笔记(5.树与二叉树 6.图)_第24张图片

二叉树–常考性质

常见考点1:

  • 叶子结点比度为2的结点数多一个

数据结构学习笔记(5.树与二叉树 6.图)_第25张图片
常见考点2
数据结构学习笔记(5.树与二叉树 6.图)_第26张图片
常见考点3

  • 前面证明过

数据结构学习笔记(5.树与二叉树 6.图)_第27张图片
完全二叉树考点1

  • 要能自己推导,而不是死记硬背
    数据结构学习笔记(5.树与二叉树 6.图)_第28张图片
    数据结构学习笔记(5.树与二叉树 6.图)_第29张图片
    完全二叉树考点2
    数据结构学习笔记(5.树与二叉树 6.图)_第30张图片
    知识点小结
    数据结构学习笔记(5.树与二叉树 6.图)_第31张图片

二叉树–存储结构

二叉树的顺序存储
数据结构学习笔记(5.树与二叉树 6.图)_第32张图片
几个重要考点的基本操作

  • 结点编号的关系

数据结构学习笔记(5.树与二叉树 6.图)_第33张图片
如果不是完全二叉树,原有的编号顺序无法反应结点的逻辑关系
数据结构学习笔记(5.树与二叉树 6.图)_第34张图片

  • 可以仍然按照想象中的完全二叉树进行编号,不存在的结点去掉即可
  • 但是不能再通过结点总数来判断左右孩子是否存在,而是用isempty来判断
  • 显而易见,这样存储,会有大量的空间闲置浪费

数据结构学习笔记(5.树与二叉树 6.图)_第35张图片
最坏情况

  • 因此二叉树的顺序存储结构只适合存储完全二叉树
  • 实际中很少这么用

数据结构学习笔记(5.树与二叉树 6.图)_第36张图片
二叉树的链式存储–二叉链表

  • n个结点就会有2n个指针域
  • n个结点,每个结点的头上都有一个指针,除了根节点,因此共有n-1个指针有指向
  • 所以二叉树链表共有n+1个空链域

数据结构学习笔记(5.树与二叉树 6.图)_第37张图片
二叉链表代码实现
数据结构学习笔记(5.树与二叉树 6.图)_第38张图片
二叉链表存储

  • 找孩子非常容易,但是找父节点只能遍历寻找
  • 也可以个结点再添加一个指针,用来存放父节点,也成为三叉链表
  • 考试一般喜欢考二叉链表,然后遍历查找父节点

知识点小结

  • 顺序存储的情况,如果结点从0开始编号,如何调整
  • 链式存储的情况,需要注意空链域

数据结构学习笔记(5.树与二叉树 6.图)_第39张图片
数据结构学习笔记(5.树与二叉树 6.图)_第40张图片

二叉树–先序、中序、后序遍历

什么是遍历
数据结构学习笔记(5.树与二叉树 6.图)_第41张图片
二叉树的递归特性
数据结构学习笔记(5.树与二叉树 6.图)_第42张图片
二叉树遍历练习

  • 给定二叉树,确定前序中序后序遍历顺序是常见考点

数据结构学习笔记(5.树与二叉树 6.图)_第43张图片
数据结构学习笔记(5.树与二叉树 6.图)_第44张图片
数据结构学习笔记(5.树与二叉树 6.图)_第45张图片
先序遍历–代码实现
数据结构学习笔记(5.树与二叉树 6.图)_第46张图片
中序遍历–代码实现
数据结构学习笔记(5.树与二叉树 6.图)_第47张图片
后序遍历–代码实现
数据结构学习笔记(5.树与二叉树 6.图)_第48张图片
空间复杂度
数据结构学习笔记(5.树与二叉树 6.图)_第49张图片

  • 先脑补出空节点
  • 红色表示第一次访问该结点,绿色表示第二次经过该结点,紫色表示第三次经过该结点
  • 不难发现,每个节点都会被路过三次

数据结构学习笔记(5.树与二叉树 6.图)_第50张图片
数据结构学习笔记(5.树与二叉树 6.图)_第51张图片
数据结构学习笔记(5.树与二叉树 6.图)_第52张图片
数据结构学习笔记(5.树与二叉树 6.图)_第53张图片
应用
求树的深度
数据结构学习笔记(5.树与二叉树 6.图)_第54张图片
知识点小结
数据结构学习笔记(5.树与二叉树 6.图)_第55张图片

二叉树–层序遍历

层序遍历算法思想

  • 初始化辅助队列
  • 根结点入队
  • 队列不空则循环
    • 队列头结点出队
    • 访问出队的节点
    • 出队的节点如果有左右孩子,则入队
    • 重新判断是否循环

数据结构学习笔记(5.树与二叉树 6.图)_第56张图片
代码实现

  • 辅助队列使用链队列,因为不清楚需要使用多长的辅助队列
  • 辅助队列只需要保存结点的指针即可,无需保存结点数据,节省空间

数据结构学习笔记(5.树与二叉树 6.图)_第57张图片
知识点小结
数据结构学习笔记(5.树与二叉树 6.图)_第58张图片

由遍历序列构造二叉树

不同二叉树的遍历序列

你可能感兴趣的:(408学习专区,c语言,数据结构,算法)