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

本文详细介绍了数据结构中的树与二叉树,包括它们的定义、性质、存储结构以及遍历方法。二叉树的特殊类型如满二叉树和完全二叉树,以及线索二叉树的概念和实现。接着讲解了图的基本概念、存储方法(邻接矩阵、邻接表)、遍历(BFS和DFS)和最小生成树、最短路径算法(BFS、Dijkstra、Floyd)。此外,还讨论了有向无环图(DAG)的拓扑排序和关键路径分析。内容深入浅出,是数据结构学习的重要参考资料。
摘要由CSDN通过智能技术生成

第五章 树与二叉树

在这里插入图片描述
树的基本概念

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

在这里插入图片描述
树的基本概念

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

在这里插入图片描述
树形逻辑结构的应用
在这里插入图片描述
结点之间的关系描述

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

在这里插入图片描述
结点、树的属性描述

  • 我们默认结点的层次从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一定为左子树的根结点,以此类推,往下找
    在这里插入图片描述
    再看一个例子
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值