← 首页·文章列表

数据结构五 树与二叉树

一、树的基本概念

1. 树的定义与性质

2. 树中结点数与度的关系(通用公式)

设树中结点总数为 n,度为0的结点数为 n₀,度为1的结点数为 n₁,…,度为 k 的结点数为 nₖ,则有:

总结点数 = 所有结点度数之和 + 1 即:n = 0×n₀ + 1×n₁ + 2×n₂ + … + k×nₖ + 1

示例(第5题):度为3的树中,度为3的结点2个,度为2的结点1个,度为1的结点2个,求度为0的结点数。

3. k叉树的最大与最小深度


二、二叉树的核心性质

1. 二叉树定义

2. 二叉树的5条基本性质

性质 内容
性质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(i=1 起始)

3. 性质3推导(叶子与二分支结点关系)

应用示例(第25题):双分支结点15,单分支结点30,叶子数 = 15 + 1 = 16。

4. 满二叉树 vs 完全二叉树

5. 完全二叉树的深度计算

深度 = ⌊log₂n⌋ + 1

示例:35个结点,log₂35 ≈ 5.13,⌊5.13⌋=5,深度=6;257个结点,log₂257≈8.00,⌊8⌋=8,深度=9。

6. 完全二叉树的结点计算(叶子、度为2、度为1)

示例(第26题):700个结点(偶数),叶子数 = 700/2 = 350。
示例(第31题):1000个结点(偶数),叶子 = 1000/2 = 500,度为2的结点 = 500-1 = 499。由于 n 为偶数,n₁ = 1,即只有一个结点只有非空左子树,无非空右子树的情况。

7. 二叉树的不同形态数


三、二叉树的遍历(重点)

1. 三种遍历的定义

遍历方式 操作顺序
先序(前序) 根 → 左子树 → 右子树
中序 左子树 → 根 → 右子树
后序 左子树 → 右子树 → 根

2. 遍历的重要性质

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

唯一确定二叉树的条件:

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

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

示例1(第2题):先序 ABCDEFG,中序 CBAEDFG。

示例2(第16题):先序 ABCDEF,中序 CBAEDF,求后序。

示例3(第21题):后序 DABEC,中序 DEBAC,求先序。

4. 特殊遍历条件下的推断


四、二叉树存储结构

1. 顺序存储

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

3. 树的存储形式(非二叉树)


五、易错填空题公式速记

问题 通用公式/结论
完全二叉树深度 ⌊log₂n⌋ + 1
完全二叉树叶子数(n偶) n/2
完全二叉树叶子数(n奇) (n+1)/2
度为2结点数 n₀ - 1
满二叉树深度为k的分支结点数 2ᵏ⁻¹ - 1
满二叉树深度为k的叶子数 2ᵏ⁻¹
3个结点二叉树形态数 5
n个结点k叉树最大深度 n
n个结点k叉树最小深度 ⌈logₖ(n(k-1)+1)⌉,二叉树为⌊log₂n⌋+1

六、知识速记卡

  1. 性质3是计算核心:n₀ = n₂ + 1,终端结点永远比双分支结点多1。
  2. 完全二叉树:深度用⌊log₂n⌋+1;叶子数取决于奇偶;若缺左孩子则必是叶子。
  3. 遍历推导:先序+中序或后序+中序可唯一确定二叉树;先序+后序不行。
  4. 遍历性质:叶子结点的相对顺序在所有遍历中不变;中序前后关系=左右位置关系。
  5. 存储:二叉链表根右指针为空;树的存储有双亲、孩子链表、孩子兄弟三种。