第五章 02二叉树(王道)

一、二叉树的基本概念

1.1 二叉树的基本概念知识总览

第五章 02二叉树(王道)

1.2 二叉树的基本概念

第五章 02二叉树(王道)
  • 递归定义:二叉树是n(n≥0)个结点的有限集合,要么为空树(n=0),要么由根结点和两个互不相交的左右子树组成
  • 核心特性:
    • 最大分支数:每个结点至多只有两棵子树
    • 有序性:左右子树不能颠倒(区别于度为2的有序树)
  • 与度为2树的区别:二叉树允许空树存在,且必须明确区分左右子树顺序

1.3 二叉树的五种状态

第五章 02二叉树(王道)
  • 空二叉树:不含任何结点
  • 仅有左子树:右子树为空二叉树
  • 仅有右子树:左子树为空二叉树
  • 仅根结点:左右子树均为空二叉树
  • 完整形态:左右子树均非空

1.4 几种特殊的二叉树 – 满二叉树

第五章 02二叉树(王道)
  • 严格定义:高度为h且含有2h−1个结点的二叉树
  • 三大特征:
    • 叶子分布:只有最后一层有叶子结点
    • 结点度数:不存在度为1的结点(只有0或2度)
    • 编号规律:按层序编号时,结点i的左孩子为2i,右孩子为2i+1,父结点为【i/2】向下取整

编号规律有助于用顺序存储的方式来存储结点

1.5 几种特殊的二叉树 – 完全二叉树

第五章 02二叉树(王道)
  • 定义本质:结点编号与同高度满二叉树中1∼n编号完全对应
  • 关键特性:
    • 叶子分布:最后两层可能出现叶子结点
    • 度数限制:最多只有一个度为1的结点
    • 孩子规律:若有单个孩子则必为左孩子
    • 存储特性:继承满二叉树的编号计算规则(按层序编号时,结点i的左孩子为2i,右孩子为2i+1,父结点为【i/2】向下取整)
    • 结点分类:当i[n/2]时为分支结点,反之为叶结点

满二叉树肯定是完全二叉树

但是完全二叉树未必是满二叉树

第五章 02二叉树(王道)

1.6 几种特殊的二叉树 – 二叉排序树(重要)

第五章 02二叉树(王道)
  • 排序规则:
    • 左子树所有结点关键字 < 根结点关键字 < 右子树所有结点关键字
    • 左右子树本身也是二叉排序树
  • 操作优势:
    • 查找效率:通过大小比较可快速定位目标结点(如查找60的演示过程)
    • 插入方法:新结点68按比较规则插入适当位置,保持排序性质

1.7 几种特殊的二叉树 – 平衡二叉树

第五章 02二叉树(王道)
  • 平衡条件:任意结点左右子树深度(高度)差不超过1
  • 性能优势:
    • 搜索效率:平衡状态下查找70仅需2步,非平衡状态需要多步
    • 形态特征:”胖”树结构(高度低)优于”瘦”树结构(高度高)
  • 与二叉排序树关系:平衡二叉树可优化二叉排序树的查询性能

1.8 二叉树基本知识回顾

第五章 02二叉树(王道)

二、二叉树的常考性质

2.1 性质1 – 非空二叉树结点关系

第五章 02二叉树(王道)

应用场景:该结论在选择题中出现频率极高,可通过示例二叉树验证(如ABDEFGIJKLM结构)

  • 叶子结点比二分支结点多一个

2.2 性质2 – 二叉树第 i 层结点数

第五章 02二叉树(王道)

2.3 性质3 – 高度为 h 的二叉树结点数

第五章 02二叉树(王道)

三、完全二叉树的常考性质

3.1 完全二叉树的高度

第五章 02二叉树(王道)
  • 向上取整
第五章 02二叉树(王道)
  • 向下取整
推导
第五章 02二叉树(王道)
第五章 02二叉树(王道)
第五章 02二叉树(王道)

3.2 完全二叉树的度结点计算

第五章 02二叉树(王道)

结论:

1、若完全二叉树有2k个(偶数)结点,则必有n1 = 1, n0 = k, n2 = k – 1

2、若完全二叉树有2k – 1 结点,则n1=0;n0 = k; n2= k-1;

3.3 结论小节

第五章 02二叉树(王道)

四、二叉树的存储结构

第五章 02二叉树(王道)

4.1 二叉树的顺序存储

第五章 02二叉树(王道)
  • 实现方式:将二叉树节点按层序编号后,连续存储在数组中。数组下标与节点编号一致(通常从1开始)。
  • 初始化:所有节点的isEmpty初始设为true表示空节点状态。

4.2 二叉树顺序存储的基本操作

第五章 02二叉树(王道)
第五章 02二叉树(王道)

4.3 顺序存储 – 非完全二叉树处理

如果不是完全二叉树依然按层序将各节点顺序存储,那么无法从结点编号反映出结点间的逻辑关系

第五章 02二叉树(王道)

处理方法:二叉树的顺序存储中,一定要把二叉树的结点编号与完全二叉树对应起来,即需补充虚拟节点使其成为完全二叉树结构

1、判断子节点存在性需检查isEmpty字段,如但是检查 2i 这个位置的结点,is empty判断应该是true,也就是空,那么就说明5号结点是不存在左孩子的。

第五章 02二叉树(王道)
第五章 02二叉树(王道)

顺序存储方式仅适合存储完全二叉树,实际应用较少

4.4 二叉树的链式存储

第五章 02二叉树(王道)
  • 特性:
    • n个节点的二叉链表共有2n个指针域
    • 除根节点外每个节点被一个指针指向,也就是说n个结点的二叉链表共有n+1个空链域
第五章 02二叉树(王道)

(空指针域可用于构造线索二叉树

4.5 二叉树的链式存储(算法实现)

第五章 02二叉树(王道)

二叉树的链式存储方式寻找结点p的左孩子和右孩子结点非常简单

但是对于寻找父结点需要从根结点遍历,对于经常需要寻找父节点的情况,使用三叉链表

  • 操作复杂度:
    • 查找孩子节点:O(1
    • 查找父节点:O(n)(无parent指针时需遍历)

考研中喜欢考不带父指针的情况

第五章 02二叉树(王道)

4.6 知识回顾

第五章 02二叉树(王道)
第五章 02二叉树(王道)
  • 结论
    • 顺序存储:仅适用于完全二叉树
    • 链式存储:通用性强,空间利用率高
    • 三叉链表:频繁需要父节点访问的场景

五、二叉树的遍历(先序、中序、后序)

第五章 02二叉树(王道)

5.1 什么是遍历

第五章 02二叉树(王道)
  • 基本概念:按照某种次序把所有结点都访问一遍
  • 线性结构:顺序简单,可从头到尾或从尾到头遍历
  • 树形结构:利用分层特性制定遍历规则,如层次遍历
  • 递归特性:基于”根节点+左子树+右子树”的递归结构制定遍历规则

5.2 二叉树 3 种遍历的概念

第五章 02二叉树(王道)

1)如果是空二叉树,则什么都不用操作;

2)求先序遍历序列

  • 规则:根左右(NLR)
  • 递归过程:
    • 访问根节点
    • 递归先序遍历左子树
    • 递归先序遍历右子树

3)求中序遍历序列(中根遍历)

  • 规则:左根右(LNR)
  • 别名:中根遍历
  • 递归过程:
    • 递归中序遍历左子树
    • 访问根节点
    • 递归中序遍历右子树

4)求后序遍历序列(后根遍历)

  • 规则:左右根(LRN)
  • 别名:后根遍历
  • 递归过程:
    • 递归后序遍历左子树
    • 递归后序遍历右子树
    • 访问根节点

5.3 二叉树遍历的案例

第五章 02二叉树(王道)
第五章 02二叉树(王道)

对于上图二叉树的先序遍历 AB,此时递归遍历 DE,后再到C,再递归FG

对于中序遍历,左根右,即 DBE A FCG

对于后序遍历,左右根,即 DEB FGC A

5.4 二叉树遍历 – 分支结点逐层展开法(手算练习)

案例一

第五章 02二叉树(王道)
第五章 02二叉树(王道)

案例二(真题类型)

第五章 02二叉树(王道)

5.5 二叉树遍历(代码)- 先序遍历

第五章 02二叉树(王道)

王道视频二叉树的先序遍历递归的刨析:13分左右

空间复杂度O(h)

每一个结点会被路过3次,第一次路过时访问结点

第五章 02二叉树(王道)

5.6 二叉树遍历(代码)- 中序遍历

第五章 02二叉树(王道)
第五章 02二叉树(王道)

每个结点都被路过3次,第二次路过结点时访问结点

5.7 二叉树遍历(代码)- 后序遍历

第五章 02二叉树(王道)
第五章 02二叉树(王道)

每个结点都被路过3次,第三次路过结点时访问结点

5.8 练习

第五章 02二叉树(王道)
第五章 02二叉树(王道)

5.9求树的深度(应用)

第五章 02二叉树(王道)
  • 递归思路:
    • 若树为空,返回深度0
    • 递归计算左子树深度 l 和右子树深度 r
    • 取max(l,r)+1作为当前树深度
  • 本质:该算法是后序遍历的变种,遵循”左右根”的处理顺序

5.10 知识回顾

重点掌握一种遍历算法

第五章 02二叉树(王道)

六、二叉树的层序遍历

6.1 层序遍历算法思想

第五章 02二叉树(王道)
  • 遍历顺序:按照从上到下、从左到右的顺序逐层访问节点,示例二叉树的遍历序列为abcdefghijkl
  • 核心数据结构:需要使用辅助队列实现
  • 算法步骤:
    • 初始化:创建一个空队列
    • 根节点入队:将二叉树的根节点放入队列
    • 循环处理:
      • 队头节点出队并访问
      • 将该节点的左孩子(若存在)入队
      • 将该节点的右孩子(若存在)入队
    • 终止条件:队列为空时遍历结束
  • 处理细节:叶子节点(如e节点)没有左右孩子,访问后不会有新节点入队

6.2 层序遍历代码实现

第五章 02二叉树(王道)
  • 数据结构定义:
    • 二叉树节点:
    • 链队列节点:
    • 队列结构:
  • 实现要点:
    • 空间优化:队列中存储节点指针而非节点本身,节省内存空间
    • 核心逻辑:
  • 设计选择:使用链队列而非顺序队列,便于动态扩展,适应不确定的节点数量

6.3 知识回顾

第五章 02二叉树(王道)

七、由遍历序列构造二叉树

7.1 不同二叉树的中序、前序、后续、层序遍历序列

中序遍历

第五章 02二叉树(王道)

中序遍历

第五章 02二叉树(王道)

后续遍历

第五章 02二叉树(王道)

层序遍历

第五章 02二叉树(王道)

重要结论: 仅凭单一遍历序列(前/中/后/层序)无法唯一确定二叉树结构

7.2 由遍历序列构造二叉树

第五章 02二叉树(王道)
第五章 02二叉树(王道)

结论:若只给出一棵二叉树的前/中/后/层序遍历序列中的一种,不能唯一确定一棵二叉树

两两组合一定需要有中序遍历才能构造二叉树

7.3 前序+中序遍历序列

第五章 02二叉树(王道)
  • 核心方法:
    • 前序序列首元素为根结点
    • 在中序序列中定位根结点,划分左右子树
    • 递归处理左右子树
  • 关键步骤:
    • 根据前序确定根节点
    • 根据中序确定左右子树范围
    • 通过子树长度验证序列对应关系

例题1:前序+中序遍历序列

第五章 02二叉树(王道)

例题2:前序+中序遍历序列

第五章 02二叉树(王道)
第五章 02二叉树(王道)

7.4 后续+中序遍历序列

第五章 02二叉树(王道)
  • 核心方法:
    • 后序序列末元素为根结点
    • 在中序序列中定位根结点位置
    • 递归处理左右子树

例题3:后序+中序遍历序列

第五章 02二叉树(王道)
第五章 02二叉树(王道)

7.5 层序+中序遍历序列

第五章 02二叉树(王道)
  • 核心方法:
    • 层序序列首元素为根结点
    • 后续元素为左右子树的根
    • 结合中序序列确定子树划分

例题4:层序+中序遍历序列

第五章 02二叉树(王道)
第五章 02二叉树(王道)

例题5:层序+中序遍历序列

第五章 02二叉树(王道)
第五章 02二叉树(王道)

7.6 知识回顾与重要考点

第五章 02二叉树(王道)
  • 核心要点:
    • 必须包含中序遍历序列才能唯一确定二叉树
    • 前序/后序/层序两两组合无法唯一确定树结构
  • 解题步骤:
    • 通过非中序序列确定根节点
    • 利用中序序列划分左右子树
    • 递归处理各子树
  • 特殊说明:
    • 前序+后序组合示例:AB和BA可对应两种不同树形
    • 层序+前序组合同样存在歧义
  • 记忆口诀: “无中序不唯一,有中序可递归”

本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客

(0)
何大锤的头像何大锤管理团队

相关推荐

  • 第五章 06并查集(王道)

    一、知识总览 二、如何表示集合关系 2.1 逻辑结构—集合 本质特征: 并查集本质上是表示集合类型的逻辑结构,数据元素之间呈现集合关系 数学概念: 集合在数学中很常用,如一个班所有同学构成集合S,元素a,b,c,d等代表各个同学 2.2 如何表示集合的逻辑关系? 子集划分: 可按不同维度将全集划分为若干互不相交的子集,如按水果喜好分类 元素关系: 任意两元素…

    2025年7月8日
    600
  • 第五章 05哈夫曼树(王道)

    一、知识总览 1.哈夫曼树是二叉树的一种,主要用于数据压缩和编码。 2.构造哈夫曼树的关键是选择权值最小的节点进行合并。 3.哈夫曼树的应用包括哈夫曼编码,用于优化数据传输的效率。 二、带权路径长度 三、哈夫曼树的定义 四、哈夫曼树的构造 五、哈夫曼编码 1.哈夫曼编码基于哈夫曼树的原理,用于优化数据传输的效率。 2.哈夫曼编码采用可变长度编码,根据字符出现…

    2025年7月8日
    500
  • 第五章 04树&森林(王道)

    一、树的存储结构 1.1 树的逻辑结构 与二叉树的区别: 普通树对分支节点的子树数量无限制,而二叉树最多只能有两棵子树 1.2 二叉树的顺序存储 实现方式: 按完全二叉树结点顺序编号并存储在数组中 1.3 如何实现树的顺序结 核心问题: 普通树无法像二叉树那样通过数组下标反映逻辑关系 1.4 双亲表示法 如何实现树的顺序存储? 解决思路: 利用每个非根结点有…

    2025年7月7日
    500
  • 第五章 03线索二叉树(王道)

    一、线索二叉树的概念 1.1 普通二叉树的局限性 为什么要有线序二叉树? 需要频繁的访问前驱和后继 1.2 中序线索二叉树 1.3 线索二叉树的存储结构 1.4 中序线索二叉树的存储结构 1.5 先序线索二叉树 1.6 后序线索二叉树 1.7 三种线索二叉树的对比 1.8 知识回顾与重要考点 二、二叉树的线索化 2.1 普通二叉树中序前驱的代码实现 2.2 …

    2025年6月29日
    600
  • 第五章 01树(王道)

    一、知识总览 二、树的定义和基本术语 2.1 树的基本概念 两种形态:空树、非空树 前驱后继:根结点无前驱,叶子结点无后继;分支结点=非终端结点,叶子结点=终端结点 唯一前驱:除根结点外,每个结点有且仅有一个前驱(多前驱则变为图结构) 树是一种递归定义的数据结构 子树特性:子树本身也是树,且各子树必须互不相交(对应唯一前驱约束) 2.2 树形逻辑结构的应用 …

    2025年6月23日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

2211932694

在线咨询: QQ交谈

邮件:hdcblog1999@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
网站建设中ing......