← 首页·文章列表

数据结构九 树与二叉树(2)

一、树的定义与基本概念

1. 树的定义

2. 树的特点

3. 结点的度


二、二叉树核心性质

1. 二叉树与树的区别

2. 二叉树基本性质

性质 内容
性质1 第 i 层最多 2ⁱ⁻¹ 个结点(i≥1)
性质2 深度为 k 的二叉树最多 2ᵏ - 1 个结点
性质3 终端结点数(叶子数)n₀ = 度为 2 的结点数 n₂ + 1
性质4 n 个结点的完全二叉树深度为 ⌊log₂n⌋ + 1
性质5 完全二叉树按层编号:i 的双亲为 ⌊i/2⌋,左孩子为 2i,右孩子为 2i+1

3. 满二叉树

4. 完全二叉树


三、二叉树的存储结构

1. 顺序存储

2. 链式存储(二叉链表)

3. 树的三种存储形式

存储形式 说明
双亲表示法 每个结点存其父结点位置
孩子链表表示法 每个结点存其所有子结点的链表
孩子兄弟表示法(二叉链表表示法) 左指针指第一个孩子,右指针指下一个兄弟

四、二叉树的遍历

1. 三种遍历方式

遍历 顺序 递归实现
先序(前序) 根 → 左子树 → 右子树 访问根,递归左,递归右
中序 左子树 → 根 → 右子树 递归左,访问根,递归右
后序 左子树 → 右子树 → 根 递归左,递归右,访问根

2. 遍历的重要性质

3. 由遍历序列推导二叉树(通用方法)

核心条件:已知 先序 + 中序 或 后序 + 中序 可唯一确定二叉树。
已知 先序 + 后序 不能唯一确定(真二叉树除外)。

通用步骤(先序+中序为例):

  1. 从先序第一个字符定根结点。
  2. 在中序中找到该根,左边为左子树中序,右边为右子树中序。
  3. 按左子树结点数在先序中划分出左右子树的先序序列。
  4. 递归重复。

举例(第15题):先序 BEFCGDH,中序 FEBGCHD,求后序。


五、树、森林与二叉树的转换

1. 树转二叉树的规则(孩子兄弟表示法)

2. 森林转二叉树的规则

3. 森林与二叉树结点关系(重点)

设森林 F 对应二叉树 B,B 有 m 个结点,B 的根为 p,p 的右子树结点数为 n:

4. 森林转二叉树右指针域为空的结点数

结论:森林 F 中有 n 个非终端结点,转成的二叉树 B 中右指针域为空的结点有 n+1 个。

推导:


六、哈夫曼树(Huffman Tree)

1. 定义

2. 带权路径长度计算

3. 构造方法

  1. 将所有权值作为单结点树,放入森林。
  2. 选取两个权值最小的树作为左右子树,构造新二叉树,新树根权值为两子树权值之和。
  3. 重复步骤2,直到只剩一棵树。

举例(第14题):权值 {3, 2, 4, 5, 1}


七、易错判断题辨析

判断内容 正误 要点
由二叉树先序和后序序列可唯一确定一棵二叉树 错 必须中序参与才能唯一确定
由树转换成二叉树,根结点的右子树一定为空 对 根无兄弟,右指针永远空
满二叉树中存在度为1的结点 错 满二叉树只有度为0和度为2的结点
任意二叉树终端结点数 = 度为2的结点数 + 1 对 二叉树性质3

八、知识速记卡

  1. 树:有且仅有一个根,子树互不相交。
  2. 二叉树性质:n₀ = n₂ + 1;满二叉树无度为1的结点。
  3. 存储:二叉链表根右指针为空;树存储有双亲、孩子链表、孩子兄弟三种。
  4. 遍历:叶子相对次序不变;中序A在B前⇔A在B左方;递归空间O(n)。
  5. 推导二叉树:需要先序+中序或后序+中序。
  6. 树→二叉树:后根遍历=二叉树中序;根右子树必空。
  7. 森林→二叉树:第一棵树结点数 = m - n(总结点 - 右子树结点)。
  8. 空右指针:非终端结点数 n + 1。
  9. 哈夫曼树:每次取最小两权值合并,WPL=Σ权值×路径长度。