【数据结构】二叉树入门全解:从定义、性质到经典真题

一、先搞懂:什么是二叉树?

二叉树(Binary Tree)是一种特殊的树形结构,定义非常清晰:它是由 n(n≥0) 个结点构成的有限集合,满足:

  1. 空树 :当 n=0 时,二叉树为空;
  2. 非空树
    • 有且仅有一个根结点;
    • 除根结点外,其余结点分为两个互不相交的子集 T₁T₂,分别称为根的左子树右子树 ,且 T₁T₂ 本身也是二叉树。
  3. 核心特点
    • 每个结点最多只有 2 棵子树(即度最大为 2);
    • 子树有严格的左右之分,顺序不能颠倒(左子树和右子树是完全不同的两棵树)。

二叉树的 5 种基本形态

二叉树的结构非常灵活,基础形态只有 5 种:

  • 空二叉树
  • 仅有根结点
  • 右子树为空(只有左子树)
  • 左子树为空(只有右子树)
  • 左右子树均非空

二、二叉树的核心性质:解题的 "万能公式"

掌握这些性质,是解决所有二叉树问题的基础,也是考试的核心考点:

性质 1:第 i 层的最大结点数

二叉树的第 i 层(根为第 1 层),最多有 2^(i-1) 个结点。

验证:第 1 层(根)2^0=1,第 2 层最多 2 个,第 3 层最多 4 个,完全符合满二叉树的结构。

性质 2:深度为 k 的二叉树最大结点数

深度为 k 的二叉树,最多有 2^k - 1 个结点。

本质:等比数列求和 1+2+4+...+2^(k-1) = 2^k - 1,对应满二叉树的结点总数。

性质 3:叶子结点与度为 2 的结点的关系

对于任意非空二叉树,若叶子结点数为 n₀,度为 2 的结点数为 n₂,则恒有:n₀ = n₂ + 1

推导:设总结点数为 n,度为 1 的结点数为 n₁,则 n = n₀ + n₁ + n₂;又因为二叉树的边数 = 总结点数 - 1 = n-1,同时边数也等于 n₁ + 2n₂(度为 1 的结点贡献 1 条边,度为 2 的贡献 2 条);联立得:n₀ + n₁ + n₂ - 1 = n₁ + 2n₂,化简后 n₀ = n₂ + 1,完美成立。


三、特殊二叉树:满二叉树 & 完全二叉树

这两种是考试中最常考的二叉树类型,必须彻底分清:

1. 满二叉树

  • 定义 :深度为 k,且结点总数为 2^k - 1 的二叉树。
  • 特点
    • 所有叶子结点都在最后一层
    • 除叶子结点外,每个结点都有 2 个子结点;
    • 同深度下,满二叉树的结点数、叶子数都是最多的;
    • 按层序编号(根为 1,从上到下、从左到右),编号为 i 的结点,左孩子为 2i,右孩子为 2i+1,父结点为 ⌊i/2⌋

2. 完全二叉树

  • 定义 :深度为 k、有 n 个结点的二叉树,当且仅当它的每个结点,都与深度为 k 的满二叉树中编号从 1n 的结点一一对应时,称为完全二叉树。
  • 核心特点(判断依据)
    1. 叶子结点只可能出现在最后两层
    2. 若某结点没有左子树,则一定没有右子树;
    3. 上一层没有铺满,绝对不能有下一层结点;
    4. 对任意结点,若其右分支子孙的最大层次为 l,则左分支子孙的最大层次必为 ll+1

完全二叉树的专属性质(解题神器)

性质 4:完全二叉树的深度

n 个结点的完全二叉树,深度为 ⌊log₂n⌋ + 1(向下取整后 + 1)。

性质 5:层序编号的父子关系

n 个结点的完全二叉树按层序编号(根为 1,每层从左到右),对任意结点 i(1≤i≤n)

  1. i=1:结点 i 是根,无父结点;若 i>1,父结点编号为 ⌊i/2⌋
  2. 2i > n:结点 i 无左孩子(是叶子结点);否则左孩子为 2i
  3. 2i+1 > n:结点 i 无右孩子;否则右孩子为 2i+1

四、经典真题实战:把性质用起来

我们结合 3 道历年考研真题,手把手教你用性质解题,彻底吃透考点。

真题 1(2009):完全二叉树结点数最大值

题目:已知一棵完全二叉树的第 6 层(根为第 1 层)有 8 个叶结点,则该完全二叉树的结点个数最多是( )A. 39 B. 52 C. 111 D. 119

解题步骤:
  1. 分析结构:完全二叉树的叶子结点只能在最后两层,因此第 6 层有 8 个叶子,说明树的深度有两种可能:深度为 6,或深度为 7(要结点数最多,必然取深度 7)。
  2. 计算前 5 层满二叉树的结点数 :深度为 5 的满二叉树,结点总数为 2^5 - 1 = 31 个。
  3. 计算第 6 层的结点数 :第 6 层最多有 2^(6-1) = 32 个结点。其中 8 个是叶子结点,说明剩下 32 - 8 = 24 个结点是非叶子结点(有子结点)。
  4. 计算第 7 层的最大结点数 :第 6 层的 24 个非叶子结点,每个最多有 2 个子结点,因此第 7 层最多有 24 × 2 = 48 个结点。
  5. 总结点数 :前 5 层 31 + 第 6 层 32 + 第 7 层 48 = 111,对应选项 C。

真题 2(2011):完全二叉树的叶子结点数

题目:若一棵完全二叉树有 768 个结点,则该二叉树中叶结点的个数是( )A. 257 B. 258 C. 384 D. 385

解题步骤:

方法 1:利用性质 3 + 完全二叉树的特点

  1. 完全二叉树中,度为 1 的结点数 n₁ 只能是 0 或 1(这是完全二叉树的核心特点)。
  2. 设叶子结点数为 n₀,度为 2 的结点数为 n₂,则:
    • 总结点数 n = n₀ + n₁ + n₂ = 768
    • 由性质 3:n₀ = n₂ + 1n₂ = n₀ - 1
  3. 代入得:n₀ + n₁ + (n₀ - 1) = 7682n₀ + n₁ = 769
  4. 因为 2n₀ 是偶数,769 是奇数,所以 n₁ 必须为 1(奇数),才能让等式成立。
  5. 因此 2n₀ + 1 = 769n₀ = 384,对应选项 C。

方法 2:利用完全二叉树层序编号性质完全二叉树的叶子结点,是编号大于 ⌊n/2⌋ 的所有结点。n=768⌊768/2⌋ = 384,因此叶子结点是编号 385~768,共 768 - 384 = 384 个,直接得出答案。


真题 3(2018):满二叉树的结点总数

题目:设一棵非空完全二叉树 T 的所有叶结点均位于同一层,且每个非叶结点都有 2 个子结点。若 T 有 k 个叶结点,则 T 的结点总数是( )A. 2k-1 B. 2k C. k² D. 2^k-1

解题步骤:
  1. 分析树的类型 :所有叶结点在同一层,且每个非叶结点都有 2 个子结点 → 这是一棵满二叉树
  2. 满二叉树中,叶子结点数 n₀ = k,由性质 3 n₀ = n₂ + 1,得度为 2 的结点数 n₂ = k - 1
  3. 满二叉树中没有度为 1 的结点(n₁=0),因此总结点数 n = n₀ + n₁ + n₂ = k + 0 + (k-1) = 2k - 1,对应选项 A。

补充验证:深度为 h 的满二叉树,叶子数 k=2^(h-1),总结点数 2^h - 1 = 2×2^(h-1) - 1 = 2k - 1,完全一致。


五、总结:二叉树核心考点速记

表格

知识点 核心公式 / 结论
二叉树性质 3 n₀ = n₂ + 1(所有二叉树通用)
满二叉树 深度 k,结点数 2^k - 1,叶子数 2^(k-1),总结点数 2×叶子数 - 1
完全二叉树 度为 1 的结点数只能是 0 或 1;叶子结点为编号 >⌊n/2⌋的结点;深度 ⌊log₂n⌋+1
完全二叉树父子关系 父结点 ⌊i/2⌋,左孩子 2i,右孩子 2i+1

相关推荐
Mem0rin2 小时前
[Java/数据结构]线性表之链表
java·数据结构·链表
人大博士的交易之路2 小时前
数据结构算法——python数据结构
开发语言·数据结构·python
stolentime3 小时前
通信题:洛谷P15942 [JOI Final 2026] 赌场 / Casino题解
c++·算法·洛谷·joi·通信题
初生牛犊不怕苦3 小时前
与AI一起学习《C专家编程》:数组与指针
c语言·学习·算法
Kk.08023 小时前
数据结构|排序算法(二) 冒泡排序
数据结构·算法·排序算法
沛沛rh453 小时前
深入并发编程:从 C++ 到 Rust 的学习笔记
c++·笔记·学习·算法·rust
Kk.08024 小时前
数据结构|排序算法(二) 希尔排序
数据结构·算法·排序算法
AI医影跨模态组学4 小时前
NPJ Precis Oncol(IF=8)复旦大学肿瘤医院等团队:基于生境CT放射组学解析可切除非小细胞肺癌时空异质性预测新辅助化疗免疫治疗病理反应
大数据·人工智能·算法·医学·医学影像