宇宙免责申明:
- 本文由deepseek做过更改,以及进行了语言上的优化,可能会出现错误,如有错误,请私信联系.
- 本文的所有图均为本人手画,由于画图时神志不清,如果发现图中有错误,请私信联系.
树
一、树的基本概念
树是一种非线性数据结构,用于描述数据元素之间的层次关系。它由n(n≥0)个节点组成一个具有层次关系的集合
二、 核心术语一览表
| 术语 | 含义 | 初赛常考指数 |
|---|---|---|
| 根节点 | 没有父节点的节点,每棵树有且仅有一个 | ⭐⭐⭐ |
| 叶子节点 | 度为0的节点(没有子节点) | ⭐⭐⭐ |
| 父节点/子节点 | 直接相连的上下层节点 | ⭐⭐⭐ |
| 节点的度 | 一个节点含有的子节点个数 | ⭐⭐⭐⭐ |
| 树的度 | 树中所有节点度的最大值 | ⭐⭐⭐ |
| 节点的层次 | 根为第1层,根的子节点为第2层...... | ⭐⭐⭐ |
| 树的深度/高度 | 树中节点的最大层次 | ⭐⭐⭐⭐ |
| 祖先 | 从根到该节点路径上的所有节点 | ⭐⭐ |
| 森林 | 多棵互不相交的树的集合 | ⭐⭐ |
二叉树
定义:二叉树(Binary Tree) 是每个节点最多只有两个子节点的树,分别称为左子节点和右子节点,次序不能颠倒。
如图:

二叉树概念辨析:
总览:
| 类型 | 定义 | 初赛考点 |
|---|---|---|
| 满二叉树 | 除叶子节点外,每个节点都有2个子节点;所有叶子节点都在同一层 | 深度为 h 的满二叉树共有 2ʰ − 1 个节点 |
| 完全二叉树 | 只有最后一层不满,且最后一层的节点全部集中在左侧连续位置 | 满二叉树是完全二叉树的特殊情况;常考数组下标计算(左孩子 2i,右孩子 2i+1) |
「注」重点区分:完全二叉树 ≠ 满二叉树。满二叉树是"完美塞满",完全二叉树是"最后一层从左到右连续排列"。
如图:
二叉树层数计算:
在 CSP-J 初赛中,默认根节点位于第 1 层。设二叉树的高度为 hhh,总结点数为 NNN。
-
第 iii 层的最大节点数
二叉树的第 iii 层最多能容纳的节点数为 2 i−12^{\,i-1}2i−1。(每个节点最多向下延伸出 2 个子节点,节点数呈等比数列:1,2,4,...1, 2, 4, \dots1,2,4,...)
-
满二叉树的高度推导
若该树为满二叉树,则前 hhh 层的所有节点均已填满。总节点数 NNN 等于前 hhh 层的最大节点数之和:
N=1+2+4+⋯+2h−1 N = 1 + 2 + 4 + \dots + 2^{h-1} N=1+2+4+⋯+2h−1
根据等比数列求和公式(首项 a1=1a_1=1a1=1,公比 q=2q=2q=2,项数 hhh):
N=1⋅(2h−1)2−1=2h−1 N = \frac{1 \cdot (2^h - 1)}{2 - 1} = 2^h - 1 N=2−11⋅(2h−1)=2h−1
由此反推满二叉树的高度:
2h=N+1 ⟹ h=log2(N+1) 2^h = N + 1 \implies h = \log_2(N + 1) 2h=N+1⟹h=log2(N+1)
-
完全二叉树的高度推导
完全二叉树的前 h−1h-1h−1 层必然是满二叉树,其节点数为 2h−1−12^{h-1} - 12h−1−1。
由于 hhh 为正整数,该不等式组等价于常用的向下取整公式:
h=⌊log2N⌋+1 h = \lfloor \log_2 N \rfloor + 1 h=⌊log2N⌋+1
-
普通二叉树的高度范围推导
当每层都尽可能填满节点时,高度达到理论最小值。此时最小的整数 hhh 必须满足 N≤2h−1N \le 2^{h} - 1N≤2h−1,解得:
hmin=⌈log2(N+1)⌉ h_{\min} = \lceil \log_2 (N + 1) \rceil hmin=⌈log2(N+1)⌉
当每层都仅有 1 个节点(退化为单链表)时,高度达到理论最大值:
hmax=N h_{\max} = N hmax=N
二叉树的遍历
二叉树有4种遍历的方式:
| 遍历方式 | 顺序 | 口诀 | 初赛常考指数 | 核心应用场景 |
|---|---|---|---|---|
| 先序遍历(前序) | 根 → 左子树 → 右子树 | 根左右 | ⭐⭐⭐⭐⭐ | 表达式树的前缀表达式(波兰式) |
| 中序遍历 | 左子树 → 根 → 右子树 | 左根右 | ⭐⭐⭐⭐⭐ | 表达式树的中缀表达式;二叉搜索树(BST)的中序遍历结果为升序序列 |
| 后序遍历 | 左子树 → 右子树 → 根 | 左右根 | ⭐⭐⭐⭐⭐ | 表达式树的后缀表达式(逆波兰式);删除树节点(先删子节点再删自身) |
| 层次遍历 | 从上到下、从左到右逐层访问 | BFS(广度优先) | ⭐⭐⭐ | 求树的高度/宽度;判断是否为完全二叉树 |
图示如下:
设有一个二叉树如下:

先序遍历(前序):口诀:根左右

中序遍历:口诀:左根右

后序遍历:口诀:左右根

最后,我们还有一种层序遍历的遍历方法,主旨在于模拟BFS的过程:
