考点频率 :★★★★★(数据结构必考,选择题每年至少1-2题,性质3和性质5考查频率最高)
难度 :⭐⭐⭐⭐
建议:重点掌握五大性质的推导逻辑,尤其是性质3的证明思路和性质5的节点编号规律
1️⃣ 为什么需要掌握二叉树的性质?
在上一篇文章中,我们学习了二叉树的基本定义。但仅仅知道"二叉树每个节点最多有两个子节点"是不够的------考试中大量题目需要你利用二叉树的数学性质来快速计算节点数、高度、叶子节点数等。
打个比方:你不需要真的去数每一层的节点,只需要记住一个公式------就像你不需要真的去数一栋楼有多少块砖,只需要知道"每层20块砖、共30层"就能算出来。
2️⃣ 性质1:第 iii 层最多有 2i−12^{i-1}2i−1 个节点
表述 :二叉树的第 iii 层(i≥1i \ge 1i≥1)上最多有 2i−12^{i-1}2i−1 个节点。
推导:
- 第1层(根节点):最多 1=201 = 2^01=20 个节点
- 第2层:最多 2=212 = 2^12=21 个节点
- 第3层:最多 4=224 = 2^24=22 个节点
- 第 iii 层:最多 2i−12^{i-1}2i−1 个节点
考点:给定层数,求该层最多有多少节点;或反过来,给定节点数,判断需要多少层才能容纳。
3️⃣ 性质2:深度为 kkk 的二叉树最多有 2k−12^k - 12k−1 个节点
表述 :深度为 kkk(k≥1k \ge 1k≥1)的二叉树最多有 2k−12^k - 12k−1 个节点。
推导 :将第1层到第 kkk 层每层的最大节点数相加:
20+21+22+⋯+2k−1=2k−12^0 + 2^1 + 2^2 + \dots + 2^{k-1} = 2^k - 120+21+22+⋯+2k−1=2k−1
考点:给定深度求最大节点数;或给定节点数求最小深度。这是性质1的"累加版"。
4️⃣ 性质3:叶子节点数 n0n_0n0 与度为2的节点数 n2n_2n2 的关系(重点中的重点)
表述 :对任意非空二叉树,n0=n2+1n_0 = n_2 + 1n0=n2+1。
- n0n_0n0:叶子节点个数(度为0的节点)
- n1n_1n1:度为1的节点个数
- n2n_2n2:度为2的节点个数
推导(理解即可,但建议能复述):
- 总节点数:n=n0+n1+n2n = n_0 + n_1 + n_2n=n0+n1+n2
- 总边数:n−1n - 1n−1(每个非根节点有一条边连向父节点)
- 从"出度"角度统计边数:n1n_1n1 个度为1的节点贡献 n1n_1n1 条边,n2n_2n2 个度为2的节点贡献 2×n22 \times n_22×n2 条边,总边数 = n1+2×n2n_1 + 2 \times n_2n1+2×n2
- 所以:n−1=n1+2×n2n - 1 = n_1 + 2 \times n_2n−1=n1+2×n2
- 将 n=n0+n1+n2n = n_0 + n_1 + n_2n=n0+n1+n2 代入:(n0+n1+n2)−1=n1+2×n2(n_0 + n_1 + n_2) - 1 = n_1 + 2 \times n_2(n0+n1+n2)−1=n1+2×n2
- 化简:n0−1=n2n_0 - 1 = n_2n0−1=n2,即 n0=n2+1n_0 = n_2 + 1n0=n2+1
记忆技巧:在任意二叉树中,叶子节点数 = 度为2的节点数 + 1。这个性质非常重要,选择题几乎年年考!
5️⃣ 性质4:满二叉树的节点数与高度关系
表述 :一棵高度为 hhh 的满二叉树,节点总数 n=2h−1n = 2^h - 1n=2h−1,叶子节点数 n0=2h−1n_0 = 2^{h-1}n0=2h−1。
注意:满二叉树的所有叶子节点都在同一层,且每个非叶子节点都有两个子节点。
推导:
- 第 iii 层有 2i−12^{i-1}2i−1 个节点
- 总节点数 n=20+21+⋯+2h−1=2h−1n = 2^0 + 2^1 + \dots + 2^{h-1} = 2^h - 1n=20+21+⋯+2h−1=2h−1
- 叶子节点在第 hhh 层,个数为 2h−12^{h-1}2h−1
6️⃣ 性质5:完全二叉树的节点编号规律(顺序存储的核心)
表述 :对于一棵有 nnn 个节点的完全二叉树,按从上到下、从左到右的顺序编号(从1开始):
| 节点 | 位置规律 |
|---|---|
| 节点 iii 的左子节点 | 2i2i2i(如果 2i≤n2i \le n2i≤n) |
| 节点 iii 的右子节点 | 2i+12i + 12i+1(如果 2i+1≤n2i + 1 \le n2i+1≤n) |
| 节点 iii 的父节点 | ⌊i/2⌋\lfloor i/2 \rfloor⌊i/2⌋(如果 i>1i > 1i>1) |
| 叶子节点范围 | i>⌊n/2⌋i > \lfloor n/2 \rfloori>⌊n/2⌋ 的节点都是叶子 |
记忆口诀 :左二右二加一,父节点是除以二向下取整。
示例:一棵完全二叉树有 10 个节点,按顺序编号为 1~10。
- 节点 5 的左子节点:2×5=102 \times 5 = 102×5=10 ✅(存在)
- 节点 5 的右子节点:2×5+1=112 \times 5 + 1 = 112×5+1=11 ❌(不存在,因为 11>1011 > 1011>10)
- 节点 10 的父节点:⌊10/2⌋=5\lfloor 10/2 \rfloor = 5⌊10/2⌋=5 ✅
7️⃣ 五大性质总结表
| 性质编号 | 内容 | 公式 |
|---|---|---|
| 性质1 | 第 iii 层最多节点数 | 2i−12^{i-1}2i−1 |
| 性质2 | 深度为 kkk 的二叉树最多节点数 | 2k−12^k - 12k−1 |
| 性质3 | 叶子节点数与度为2的节点数关系 | n0=n2+1n_0 = n_2 + 1n0=n2+1 |
| 性质4 | 满二叉树高度 hhh 的节点数 | n=2h−1n = 2^h - 1n=2h−1,叶子 = 2h−12^{h-1}2h−1 |
| 性质5 | 完全二叉树节点 iii 的左/右/父节点 | 左 2i2i2i,右 2i+12i+12i+1,父 ⌊i/2⌋\lfloor i/2 \rfloor⌊i/2⌋ |
8️⃣ 经典例题
例题1(性质3):一棵二叉树有 10 个叶子节点,则该二叉树中度为2的节点有( )个。
A. 8
B. 9
C. 10
D. 11
解析 :n0=n2+1⇒n2=n0−1=10−1=9n_0 = n_2 + 1 \Rightarrow n_2 = n_0 - 1 = 10 - 1 = 9n0=n2+1⇒n2=n0−1=10−1=9。选 B。
例题2(性质1+性质2):一棵深度为 6 的二叉树,最多有( )个节点,第 4 层最多有( )个节点。
A. 63;8
B. 63;16
C. 32;8
D. 32;16
解析:
- 深度6最多节点:26−1=632^6 - 1 = 6326−1=63
- 第4层最多节点:24−1=82^{4-1} = 824−1=8
选 A。
例题3(性质5):一棵完全二叉树有 100 个节点,其叶子节点数为( )。
解析:
- 节点编号从1到100
- 叶子节点判断条件:i>⌊n/2⌋=50i > \lfloor n/2 \rfloor = 50i>⌊n/2⌋=50
- 叶子节点为编号 51,52,...,10051, 52, \dots, 10051,52,...,100,共 100−51+1=50100 - 51 + 1 = 50100−51+1=50 个
答案:50
例题4(性质5):在一棵完全二叉树中,节点 7 的左子节点编号为( ),右子节点编号为( )。
A. 14;15
B. 14;16
C. 15;16
D. 15;14
解析 :左子节点 =2×7=14= 2 \times 7 = 14=2×7=14,右子节点 =2×7+1=15= 2 \times 7 + 1 = 15=2×7+1=15。选 A。
9️⃣ 记忆口诀
二叉树下藏规律,五大性质要牢记。
第 i 层最多 2i−12^{i-1}2i−1,深度 k 满 2k−12^k - 12k−1。
叶子比二多一个,n0=n2+1n_0 = n_2 + 1n0=n2+1。
完全二叉树编号灵,左二右二加一成。
🔟 小测验(评论区对答案)
一棵二叉树有 8 个度为2的节点,则该二叉树的叶子节点数为( )。
A. 7
B. 8
C. 9
D. 10
🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #二叉树 #二叉树性质 #数据结构 #软考备考