当前位置: 首页 > news >正文

第五章 树与二叉树

文章目录

  • 知识框架图
  • 考纲内容以及重难点
    • 考纲内容
    • 重难点
  • 树和森林
    • 基本概念
    • 树的性质
    • 树的存储结构
      • 双亲表示法
      • 孩子表示法
      • 孩子兄弟表示法
    • 森林
  • 二叉树
    • 二叉树的定义
    • 二叉树的性质
    • 二叉树的存储结构
      • 顺序存储结构
      • 链式存储结构
    • 二叉树的遍历
      • 先序遍历(PreOrder)
      • 中序遍历(InOrder)
      • 后序遍历(PostOrder)
      • 层次遍历
      • 由遍历序列构造二叉树
  • 线索二叉树
    • 线索二叉树的基本概念
    • 中序线索二叉树
    • 先序线索二叉树
    • 后序线索二叉树
  • 哈夫曼树和哈夫曼编码
    • 哈夫曼树的定义
    • 哈夫曼树的构造
    • 哈夫曼树的性质
    • 哈夫曼编码
  • 树和森林的遍历
    • 树的遍历
      • 先根遍历
      • 后根遍历
    • 森林的遍历
      • 先序遍历森林
      • 中序遍历森林
  • 树、森林与二叉树的转换
    • 树转换为二叉树
    • 森林转换为二叉树
    • 二叉树转换为森林
  • 错题

今日格言:积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患

知识框架图

考纲内容以及重难点

考纲内容

  • 树的基本概念
  • 树的存储结构
  • 二叉树的顺序存储结构和链式存储结构
  • 二叉树的遍历
  • 线索二叉树的基本概念和构造
  • 森林和二叉树的转换
  • 树和森林的遍历
  • 哈夫曼(Huffman)树和哈夫曼编码
    统考以选择题大题的形式考察本章。选择题考点较多,大多数不难,树和二叉树的性质,二叉树的应用,二叉树的遍历等等。大题考过和树遍历相关的算法题

重难点

显然从标题就可以看出二叉树是重难点,各种遍历操作之类的。

树和森林

在这里插入图片描述

基本概念

树是n(n≥0)个结点的有限集。当n=0时,称为空树
在任意一棵非空树中应满足:

  • 有且仅有一个特定的称为根的结点。
  • 当n大于1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…TmT_1,T_2,…T_mT1,T2,Tm,其中每个集合本身又是一棵树,并且称为根的子树
    由此可以看出,树是一种递归的数据结构,因为在树的定义中用到了其自身。
    树适用于表示具有层次结构的数据,例如:族谱、文件系统以及思维导图。
    在这里插入图片描述
    在这里插入图片描述

树的性质

树中的某个结点(除根节点外)最多只和上一层的一个结点(即其双亲结点)有直接关系,根节点没有直接上层结点,因此在n个结点的树中有n-1条边。简而言之:

  • 树的根结点没有前驱,除根节点外的所有结点有且只有一个前驱
  • 树中所有结点都可以有零个或多个后继。
    在这里插入图片描述
    有序树:树中结点的各子树从左到右是有次序的,不能互换,称该树为有序树,否则称为无序树

树的存储结构

依旧采用顺序存储或者链式存储结构,但无论采用何种存储方式,都要求能唯一地反映树中各结点间的逻辑关系

双亲表示法

有点类似于树的层次遍历,这种存储结构采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针(数组下标),指向其双亲结点在数组中的位置。
在这里插入图片描述
双亲表示法的存储结构可定义如下:

#define MAX_TREE_SIZE 100
typedef struct {
ElemType data;
int parent;    //伪指针
}PTNode;typedef struct{
PTNode nodes[MAX_TREE_SIZE];    //双亲表示数组
int n;    //结点数
}

孩子表示法

在这里插入图片描述

孩子兄弟表示法

在这里插入图片描述

森林

如下图所示:可以看出只要把根节点删去就成了森林。反之,只要给m棵独立树加上一个结点,并把这m棵树作为该结点的子树,则森林就变成了树。
在这里插入图片描述

二叉树

二叉树的定义

二叉树的性质

二叉树的存储结构

顺序存储结构

链式存储结构

二叉树的遍历

先序遍历(PreOrder)

中序遍历(InOrder)

后序遍历(PostOrder)

层次遍历

由遍历序列构造二叉树

线索二叉树

线索二叉树的基本概念

中序线索二叉树

先序线索二叉树

后序线索二叉树

哈夫曼树和哈夫曼编码

哈夫曼树的定义

哈夫曼树的构造

哈夫曼树的性质

哈夫曼编码

树和森林的遍历

树的遍历

树的遍历是指用某种方式访问树中的每个结点,且仅访问一次。主要有先根遍历和后根遍历这两种方式:

先根遍历

若树非空,则按如下规则遍历:

  • 先访问根节点
  • 再依次遍历根结点的每棵子树,遍历子树时仍遵循先根后子树的规则。
    其遍历序列与这棵树相应二叉树的先序序列(根左右)相同。

后根遍历

若树非空,则按如下规则遍历:

  • 先依次遍历根结点的每棵子树,遍历子树时仍遵循先子树后根的规则。
  • 再访问根节点。
    其遍历序列与这棵树相应二叉树的中序序列相同。
    树也有层次遍历,与二叉树的层次遍历思想基本相同,即按层序依次访问各结点。
    在这里插入图片描述

森林的遍历

森林有两种遍历方法:

先序遍历森林

若森林为空,则按如下规则遍历:

  • 访问森林中第一棵树的根节点
  • 先序遍历第一棵树中根节点的子树森林
  • 先序遍历除去第一棵树之后剩余的树构成的森林
    在这里插入图片描述
    在这里插入图片描述

中序遍历森林

森林为空时,按如下规则遍历:

  • 中序遍历森林中第一棵树的根节点的子树森林
  • 访问第一棵树的根节点
  • 中序遍历除去第一棵树之后剩余的树构成的森林
    在这里插入图片描述
    在这里插入图片描述

树、森林与二叉树的转换

树转换为二叉树

左孩子右兄弟法,因为根节点没有兄弟,因此树转换得到的二叉树没有右子树。

森林转换为二叉树

每棵树都左孩子右兄弟,然后再依次将第i棵二叉树作为第i-1棵二叉树的右子树。

二叉树转换为森林

和森林转化为二叉树的过程正好逆过来,先断链,再分别将二叉树转为树。

错题

在这里插入图片描述

http://www.dtcms.com/a/328386.html

相关文章:

  • 腾讯云iOA:全面提升企业办公安全与效率的智能解决方案
  • 什么时候用WS(WebSocket),什么使用用SSE(Server-Sent Events)?
  • HTTP 协议详解:深入理解 Header 与 Body!
  • 【前端Vue】log-viewer组件的使用技巧
  • 有趣的 npm 库 · json-server
  • frp 实现内网穿透实战教程
  • CANopen Magic调试软件使用
  • 1 JQ6500语音播报模块详解(STM32)
  • 工作流调度(草稿)
  • Android Studio注释如何不从行首开始
  • Mysql GROUP_CONCAT函数数据超长导致截取问题记录
  • 常用Linux指令:Java/MySQL/Tomcat/Redis/Nginx运维指南
  • React 合成事件系统深度解析
  • Jenkins 实战指南-项目自动构建部署全流程通关
  • 明远智睿T113-i核心板:工业设备制造的“破局者”
  • Qt 常用控件 - 7
  • 大数据与人工智能在保险行业中的应用:2025年精准理赔的优化
  • VirtualBox 虚拟机磁盘扩容完整手册
  • 深入理解二维数组创建与使用
  • Unity TextMeshPro(二)优化
  • Redis知识点+项目+面试八股
  • 深度解读 WizTelemetry 2.0:链路追踪如何让分布式系统“无所遁形”
  • spring-cloud整合nacos详细攻略
  • 《汇编语言:基于X86处理器》第13章 高级语言接口(2)
  • 无人机在环保监测中的应用:低空经济发展的智能监测与高效治理
  • 一体化步进伺服电机在无人机舱门应用中的应用案例
  • gpt-oss-120b 模型:笔记本上的智能“奇幻之旅”
  • 什么叫渲染效果图?啥是渲染图
  • 如何将 AGV 叉车成功集成到仓库自动化系统中?
  • 智能化评估体系:数据生产、在线化与自动化的三重奏