Skip to content

树与二叉树的定义与基本概念

核心思想

树的定义

(Tree)是 n(n ≥ 0)个结点的有限集合 T。当 n = 0 时为空树;当 n > 0 时满足:

  1. 有且仅有一个特定的结点称为(root)
  2. 其余结点可分为 m(m ≥ 0)个互不相交的有限集合 T₁, T₂, ..., Tₘ,每个集合本身又是一棵树,称为根的子树(subtree)

这是一个递归定义——树的定义中包含了树自身。

基本术语

            A          ← 根结点(第1层)
          / | \
        B   C   D      ← 第2层
       / \     / \
      E   F   G   H    ← 第3层
         /
        I              ← 第4层
术语定义上图示例
结点的度结点的子树个数A 的度 = 3,B 的度 = 2,C 的度 = 0
树的度树中结点的最大度数度 = 3(结点 A)
叶子结点度为 0 的结点C, E, G, H, I
分支结点度 > 0 的结点A, B, D, F
孩子与双亲结点的子树的根称为孩子,该结点称为双亲B 是 A 的孩子,A 是 B 的双亲
兄弟同一双亲的结点B、C、D 互为兄弟
祖先与子孙从根到该结点路径上的所有结点I 的祖先:F、B、A
结点的层次根为第 1 层,其孩子为第 2 层,依次类推I 在第 4 层
树的高度(深度)树中结点的最大层次高度 = 4
有序树/无序树子树从左到右有无次序之分
森林m(m ≥ 0)棵互不相交的树的集合删去根 A 后得到 3 棵子树构成的森林

树的性质

性质公式
结点数 = 所有结点的度之和 + 1n = Σdegree + 1
度为 m 的树第 i 层最多有 mⁱ⁻¹ 个结点
高度为 h 的 m 叉树最多有 (mʰ - 1)/(m - 1) 个结点等比数列求和
n 个结点的 m 叉树最小高度h = ⌈logₘ(n(m-1) + 1)⌉

二叉树的定义

二叉树(Binary Tree)是 n(n ≥ 0)个结点的有限集合,它或者是空集,或者由一个根结点和两棵互不相交的、分别称为左子树和右子树的二叉树组成。

二叉树与度为 2 的有序树的区别:

二叉树度为 2 的有序树
子树数量每个结点最多 2 棵子树恰好存在度为 2 的结点
空树可以是空树至少有 3 个结点
左右之分严格区分左右子树只有一棵子树时无左右之分

这是 408 的经典易错点——二叉树不是度为 2 的有序树的特例。

特殊二叉树

名称定义特点
满二叉树高度为 h,有 2ʰ - 1 个结点每层结点数都达到最大值
完全二叉树前 h-1 层满,第 h 层从左到右连续编号与满二叉树一一对应
二叉排序树(BST)左子树 < 根 < 右子树中序遍历得到有序序列
平衡二叉树(AVL)任意结点左右子树高度差不超过 1 的 BST保证查找效率 O(log n)
   满二叉树          完全二叉树         非完全二叉树
      1                 1                  1
     / \               / \                / \
    2   3             2   3              2   3
   / \ / \           / \   \            /     \
  4  5 6  7         4   5   6          4       7

二叉树的性质

这些性质是 408 计算题的核心工具:

编号性质公式
1第 i 层最多有 2ⁱ⁻¹ 个结点
2高度为 h 的二叉树最多有 2ʰ - 1 个结点
3叶子数与度为2的结点数的关系n₀ = n₂ + 1
4n 个结点的完全二叉树高度h = ⌈log₂(n + 1)⌉ 或 ⌊log₂n⌋ + 1
5完全二叉树结点 i 的双亲⌊i/2⌋
6完全二叉树结点 i 的左孩子2i(若 2i > n 则无左孩子)
7完全二叉树结点 i 的右孩子2i + 1(若 2i+1 > n 则无右孩子)

性质 3 推导:设度为 0、1、2 的结点数分别为 n₀、n₁、n₂。从结点总数角度:n = n₀ + n₁ + n₂。从边的数量角度:边数 = n - 1 = n₁ + 2n₂。联立得 n₀ = n₂ + 1

完全二叉树的额外性质

性质说明
n₁ 只能是 0 或 1n 为偶数时 n₁ = 1,n 为奇数时 n₁ = 0
叶子结点只出现在最后两层
度为 1 的结点最多 1 个且该结点只有左孩子

树的存储结构

树不像二叉树那样最多两个孩子,结点的度不固定,因此需要专门的存储方式。

存储方式结点结构找双亲找孩子适用场景
双亲表示法data + parent(双亲在数组中的下标)O(1)O(n),需遍历整个数组以"找双亲"为主的应用(如并查集)
孩子表示法每个结点的孩子用单链表串联O(n),需遍历所有链表O(度)以"找孩子"为主的应用
孩子兄弟表示法firstChild + nextSibling不方便(除非加 parent 指针)O(度)树↔二叉树转换,详见树与森林的转换

双亲表示法

用一维数组存储所有结点,每个结点包含数据域和双亲下标:

下标   data   parent
 0      A       -1    ← 根结点,parent = -1
 1      B        0
 2      C        0
 3      D        0
 4      E        1
 5      F        1

对应的树:A 是根,B/C/D 是 A 的孩子,E/F 是 B 的孩子。

孩子表示法

用数组存储所有结点,每个结点附带一个单链表,链表中存放该结点所有孩子的下标:

下标  data  孩子链表
 0    A  → [1] → [2] → [3] → ∧
 1    B  → [4] → [5] → ∧
 2    C  → ∧
 3    D  → ∧
 4    E  → ∧
 5    F  → ∧

对比:双亲表示法和孩子表示法的优缺点正好互补。如果既需要找双亲又需要找孩子,可以将两者结合——在孩子表示法的基础上增加 parent 域。

二叉树的存储结构

存储方式实现适用场景
顺序存储用数组,按完全二叉树编号存储完全二叉树(空间利用率高)
链式存储二叉链表(lchild, data, rchild)一般二叉树
三叉链表增加 parent 指针需要频繁找双亲

含 n 个结点的二叉链表中,有 n + 1 个空指针域。推导:n 个结点共 2n 个指针域,其中 n - 1 个被使用(每条边占一个),剩余 2n - (n-1) = n + 1 个为空。这些空指针域正是线索二叉树利用的空间。

考研高频考点

  • ⭐ 二叉树性质 n₀ = n₂ + 1 的计算应用(几乎每年必考)
  • ⭐ 完全二叉树的结点数与高度的关系(选择题/填空题高频)
  • ⭐ 完全二叉树的双亲/孩子编号计算(选择题)
  • ⭐ 二叉树与度为 2 的有序树的区别(概念辨析)
  • ⭐ 满二叉树与完全二叉树的区别(概念辨析)
  • ⭐ 树的三种存储结构的特点对比:双亲表示法、孩子表示法、孩子兄弟表示法(选择题高频)
  • 树的基本术语(度、层次、高度)的准确理解
  • 空指针域个数 n + 1 的推导
  • 森林与树的关系

易错:完全二叉树≠满二叉树。满二叉树是完全二叉树的特例,完全二叉树的最后一层可以不满,但结点必须从左到右连续排列。

易错:树的高度(深度)从 1 开始计数还是从 0 开始,不同教材有不同约定。408 统考通常采用根结点在第 1 层的约定(严蔚敏教材),做题时注意题目的具体定义。

相关知识