【数据结构】二叉树的性质(五大性质+计算)

考点频率 :★★★★★(数据结构必考,选择题每年至少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的节点个数

推导(理解即可,但建议能复述):

  1. 总节点数:n=n0+n1+n2n = n_0 + n_1 + n_2n=n0+n1+n2
  2. 总边数:n−1n - 1n−1(每个非根节点有一条边连向父节点)
  3. 从"出度"角度统计边数:n1n_1n1 个度为1的节点贡献 n1n_1n1 条边,n2n_2n2 个度为2的节点贡献 2×n22 \times n_22×n2 条边,总边数 = n1+2×n2n_1 + 2 \times n_2n1+2×n2
  4. 所以:n−1=n1+2×n2n - 1 = n_1 + 2 \times n_2n−1=n1+2×n2
  5. 将 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
  6. 化简: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

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #二叉树 #二叉树性质 #数据结构 #软考备考

相关推荐
wabs6661 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
CIO_Alliance1 小时前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型
凉茶钱1 小时前
【数据结构】堆的应用
c语言·数据结构
Capricorn19882 小时前
知芽研究问题看板无法推进?从孵化区到笔记的机制排查指南
大数据·论文阅读·人工智能·笔记·学习方法·论文笔记
闪闪发亮的小星星2 小时前
相机脱靶量VS精跟踪精度
笔记
皖山文武2 小时前
逻辑代数基础学习笔记--概述
笔记·学习·机器学习
..Dauntless..3 小时前
手写vector vs std::vector:从功能正确到性能达标
算法
间歇性努力持续性发呆的野生快乐选手3 小时前
栈的性质(进栈,出栈,访问)
数据结构·c++
m0_547486663 小时前
《数据结构与算法》全套PPT课件2026(中国海洋大学)
数据结构·算法