【软考中级 - 软件设计师 - 基础知识】数据结构之树与二叉树

树是 “非线性结构” 的代表(区别于线性表的 “一对一”,树是 “一对多”),而二叉树是树结构中最常用、考试最核心的类型(90% 的树相关题目围绕二叉树展开)。比如电脑中的文件系统(C 盘→文件夹→文件)、数据库中的 B + 树索引,都基于树结构设计。下文从 “树的基本概念” 入手,重点拆解二叉树的性质、遍历和特殊类型,确保每个考点都有 “例子 + 计算”。​

一、先搞懂:树的基本概念(基础铺垫)​

树的结构像 “自然界的树”,有根、枝、叶,先记清核心术语(考试常考术语辨析):​

术语​

通俗解释​

例子(以文件系统树为例)​

根节点​

树的最顶层节点(没有父节点)​

C 盘(整个文件系统的根)​

父节点 / 子节点​

直接上层节点为父,直接下层节点为子​

“文档” 文件夹是 “C 盘” 的子节点,“C 盘” 是父节点​

叶子节点​

没有子节点的节点(树的最底层)​

“简历.docx” 文件(没有下层内容)​

节点的度​

该节点拥有的子节点数量​

“文档” 文件夹有 3 个文件→度为 3​

树的深度​

从根节点到最底层叶子节点的层数(根为 1 层)​

C 盘→文档→简历.docx→深度为 3​

关键提醒:树的 “深度” 计算有两种说法(根为 0 层或 1 层),考试中若未说明,默认 “根为 1 层”(按官方教程标准)。​

二、核心考点 1:二叉树的定义与重要性质​

二叉树是 “每个节点最多有两个子节点” 的树(左子节点和右子节点,顺序不能乱),比如 “左子树存小于父节点的值,右子树存大于父节点的值”(后续二叉搜索树会讲)。考试重点考二叉树的 5 个重要性质(常考计算),需熟记并会应用。​

1. 二叉树的 5 个重要性质(必背 + 计算)​
性质 1:第 i 层最多有 2^(i-1) 个节点(i≥1)​
  • 解释:第 1 层(根)最多 1 个(2^0=1),第 2 层最多 2 个(2^1=2),第 3 层最多 4 个(2^2=4),以此类推;​
  • 计算示例:求第 5 层最多有多少个节点?→ 2^(5-1)=16 个。​
性质 2:深度为 k 的二叉树,最多有 2^k -1 个节点(k≥1)​
  • 解释:所有层的最大节点数相加(1+2+4+...+2^(k-1) = 2^k -1);​
  • 计算示例:深度为 3 的二叉树最多有多少节点?→ 2^3 -1=7 个(1+2+4)。​
性质 3:任意二叉树,叶子节点数 = 度为 2 的节点数 + 1(记为 n0 = n2 + 1)​
  • 解释:度为 0 的是叶子节点(n0),度为 1 的是有 1 个孩子的节点(n1),度为 2 的是有 2 个孩子的节点(n2);总节点数 n = n0 + n1 + n2,同时通过 “边” 的数量推导可得 n0 = n2 +1;​
  • 计算示例:某二叉树有 5 个度为 2 的节点,3 个度为 1 的节点,求叶子节点数?→ n0=5+1=6 个,总节点数 = 6+3+5=14 个。​
性质 4:完全二叉树的叶子节点数(重点)​

完全二叉树是 “除最后一层外,每一层节点数都满,最后一层节点从左到右排满(不能空左缺右)”(后续会细讲),其叶子节点数满足:​

  • 若总节点数 n 为奇数:n0 = (n+1)/2;​
  • 若总节点数 n 为偶数:n0 = n/2;​
  • 计算示例:完全二叉树有 15 个节点(奇数)→ n0=(15+1)/2=8 个;有 14 个节点(偶数)→ n0=14/2=7 个。​
性质 5:完全二叉树中,节点 i(从根开始按层编号,左到右)的左孩子是 2i,右孩子是 2i+1(父节点是 i//2)​
  • 解释:根节点编号 1,第 2 层左 2 右 3,第 3 层左 4 右 5、左 6 右 7,以此类推;​
  • 计算示例:编号为 5 的节点,左孩子 = 2×5=10,右孩子 = 2×5+1=11,父节点 = 5//2=2(整除)。​
2. 特殊二叉树(考试高频)​

类型​

定义​

关键特征(便于判断)​

满二叉树​

深度为 k,且节点数 = 2^k -1(每一层都满)​

叶子节点全在最后一层,没有度为 1 的节点​

完全二叉树​

除最后一层外全满,最后一层从左到右排满​

度为 1 的节点最多 1 个(要么 0 个,要么 1 个)​

二叉搜索树(BST)​

左子树所有节点值<父节点值,右子树所有节点值>父节点值​

中序遍历结果是 “从小到大的有序序列”​

判断示例:​

  • 深度为 3,节点数 7→满二叉树(也是完全二叉树);​
  • 深度为 3,节点数 6→完全二叉树(最后一层左 4、5,缺 6、7);​
  • 深度为 3,节点数 5→不是完全二叉树(最后一层左 4,缺 5,右 6 存在→空左缺右,不符合)。​

三、核心考点 2:二叉树的遍历(必考)​

遍历是 “按一定顺序访问二叉树的所有节点”,考试重点考 3 种遍历方式:前序(根→左→右)、中序(左→根→右)、后序(左→右→根),核心是 “递归思想”(也可用栈 / 队列实现非递归,但考试重点考递归逻辑)。​

1. 三种遍历的定义(记顺序)​

以如下二叉树为例(根 A,左子树 B,右子树 C;B 的左 D,右 E;C 的左 F):​

      A
    /   \
   B     C
  / \   /
 D   E F
(1)前序遍历(根→左→右)​

步骤:先访问根节点,再递归遍历左子树,最后递归遍历右子树;​

遍历结果:A → B → D → E → C → F。​

(2)中序遍历(左→根→右)​

步骤:先递归遍历左子树,再访问根节点,最后递归遍历右子树;​

遍历结果:D → B → E → A → F → C。​

(3)后序遍历(左→右→根)​

步骤:先递归遍历左子树,再递归遍历右子树,最后访问根节点;​

遍历结果:D → E → B → F → C → A。​

2. 遍历结果推导(真题高频)​

考试常考 “已知两种遍历结果,求第三种”,核心是 “中序遍历 + 前序 / 后序,可唯一确定二叉树”(前序 + 后序不能唯一确定,因无法判断左 / 右子树范围)。​

推导示例:已知前序 A→B→D→E→C→F,中序 D→B→E→A→F→C,求后序。​

Step1:前序的第一个节点是根(A);​

Step2:在中序中找 A 的位置,左边是左子树(D→B→E),右边是右子树(F→C);​

Step3:前序中 A 之后的节点是左子树的前序(B→D→E),再之后是右子树的前序(C→F);​

Step4:对左子树(根 B)重复 Step1-Step3:中序左 D,右 E→前序 B→D→E,中序 D→B→E;​

Step5:对右子树(根 C)重复 Step1-Step3:中序左 F,右空→前序 C→F,中序 F→C;​

Step6:按后序规则遍历,结果 D→E→B→F→C→A(和之前一致)。​

3. 遍历的应用场景​

遍历方式​

应用场景​

例子​

前序遍历​

复制二叉树、获取树的前缀表达式​

按前序顺序复制节点,保持树结构​

中序遍历​

二叉搜索树排序(从小到大)​

中序遍历 BST,得到有序序列​

后序遍历​

计算二叉树的节点数、高度(先算子树)​

后序遍历每个节点时,累加子树节点数​

四、核心考点 3:二叉树的高度计算(常考)​

树的高度(深度)是 “从根到最远叶子节点的层数”,考试常考 “根据遍历结果或节点数计算高度”,核心是 “递归计算左、右子树高度,取最大值 + 1(根节点)”。​

1. 已知二叉树结构,计算高度​

以上面的二叉树为例:​

  • 根 A 的左子树(B)高度:B 的左 D(高度 1)、右 E(高度 1)→ 左子树高度 = 1+1=2;​
  • 根 A 的右子树(C)高度:C 的左 F(高度 1)、右空→ 右子树高度 = 1+1=2;​
  • 根 A 的高度 = max (2,2)+1=3。​
2. 已知完全二叉树的节点数,计算高度​

完全二叉树的高度 k 满足:2^(k-1) ≤ n < 2^k(n 是总节点数),高度 k=⌈log₂(n+1)⌉(向上取整)或 k=⌊log₂n⌋+1(向下取整)。​

计算示例:​

  • n=15(满二叉树):2^(3-1)=4 ≤15 <8=2^3?不对,2^(4-1)=8 ≤15 <16=2^4→k=4;​
  • n=10:2^(3-1)=4 ≤10 <8?不对,2^3=8 ≤10 <16=2^4→k=4;​
  • 公式验证:⌊log₂10⌋+1=3+1=4(正确)。​

五、备考小贴士(3 步搞定)​

  1. 记性质与公式:重点背二叉树的 5 个性质(尤其是 n0=n2+1、完全二叉树的叶子节点数和高度计算),每天花 5 分钟默写;​
  2. 练遍历推导:找 10 道 “已知前序 + 中序,求后序” 的题目,按 “找根→分左右子树→递归” 的步骤练习,确保能快速推导;​
  3. 辨特殊二叉树:记住满二叉树、完全二叉树、BST 的关键特征(如完全二叉树度为 1 的节点最多 1 个),做题时先判断类型,再用对应性质计算。​

下一篇【基础知识】专栏将讲解 “图结构基础”(图的定义、存储、遍历),图是更复杂的非线性结构(“多对多”),考试中常结合 “最短路径”“拓扑排序” 出题,建议提前回顾树的遍历逻辑(图的遍历是树遍历的延伸)。​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YAY_tyy

坚持不设置VIP文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值