欢迎光临
我们一直在努力

【数据结构】复习日:树 + 图 + 排序(整理对比表)

适合读者:软考中级备考同学
阅读时间:8分钟
内容:二叉树、图、排序三大模块核心对比表、易错点、记忆口诀汇总

一、二叉树部分

1.1 二叉树五大性质

性质编号内容公式应用场景
性质1 iii 层最多节点数 2i−12^{i-1}2i1 求某一层最多能放多少个节点
性质2 深度为 kkk 的二叉树最多节点数 2k−12^k – 12k1 求一棵树最多能有多少节点
性质3 叶子节点数与度为2的节点数关系 n0=n2+1n_0 = n_2 + 1n0=n2+1 选择题必考,已知叶子求二度节点
性质4 满二叉树高度 hhh 的节点数 n=2h−1n = 2^h – 1n=2h1,叶子 =2h−1= 2^{h-1}=2h1 满二叉树计算
性质5 完全二叉树节点 iii 的左/右/父节点 2i2i2i,右 2i+12i+12i+1,父 ⌊i/2⌋\\lfloor i/2 \\rfloori/2 顺序存储的数组下标计算

1.2 满二叉树 vs 完全二叉树

对比项满二叉树完全二叉树
叶子节点位置 全部在最底层 只能在最后两层
非叶子节点 都有两个子节点 每个节点度 ≤2\\le 22
节点数 恰好 2h−12^h – 12h1 不一定
顺序存储 可以 可以(重点)
关系 满二叉树一定是完全二叉树 完全二叉树不一定是满二叉树

1.3 二叉树的遍历对比

遍历方式访问顺序根节点位置实现方式
前序 根 → 左 → 右 第一个 递归/栈
中序 左 → 根 → 右 中间 递归/栈
后序 左 → 右 → 根 最后一个 递归/栈
层次 上 → 下,左 → 右 第一个 队列

还原规律:前序/后序定根,中序分左右。前序+后序不能唯一确定二叉树。

1.4 二叉排序树(BST) vs 平衡二叉树(AVL)

对比项二叉排序树(BST)平衡二叉树(AVL)
定义 左小右大,递归定义 BST + 平衡因子 ≤1\\le 11
中序遍历 递增有序 递增有序
查找效率 平均 O(log⁡n)O(\\log n)O(logn),最坏 O(n)O(n)O(n) 始终 O(log⁡n)O(\\log n)O(logn)
插入/删除 直接插入或删除 可能需要旋转调整
适用场景 数据动态变化不剧烈 频繁查找、对效率要求高

二、图部分

2.1 图的基本术语速查

术语含义关键公式
无向图 边无方向 度之和 =2×∣E∣= 2 \\times |E|=2×E
有向图 边有方向 入度之和 === 出度之和 =∣E∣= |E|=E
连通图(无向) 任意两顶点有路径 至少 n−1n-1n1 条边
强连通图(有向) 任意两顶点有双向路径 至少 nnn 条边(环)
完全图(无向) 任意两顶点都有边 n(n−1)/2n(n-1)/2n(n1)/2 条边
完全图(有向) 任意两顶点都有双向边 n(n−1)n(n-1)n(n1) 条边
连通分量 无向图的极大连通子图

2.2 邻接矩阵 vs 邻接表

对比项邻接矩阵邻接表
空间复杂度 O(n2)O(n^2)O(n2) O(n+e)O(n + e)O(n+e)
判断边是否存在 O(1)O(1)O(1)(直接查) O(degree)O(degree)O(degree)(遍历链表)
求某顶点度(无向图) O(n)O(n)O(n)(统计一行) O(1)O(1)O(1)(链表长度)
适合图类型 稠密图 稀疏图
实现复杂度 简单 较复杂

无向图邻接表:所有链表的节点总数 =2e= 2e=2e(每条边存两次)

2.3 DFS vs BFS

对比项DFS(深度优先)BFS(广度优先)
核心数据结构 栈(递归) 队列
遍历策略 一条路走到黑,回溯 层层推进,先近后远
生成树形态 高瘦 矮胖
最短路径 ❌ 不适合 ✅ 适合(无权图)
空间复杂度 O(n)O(n)O(n)(递归栈) O(n)O(n)O(n)(队列)
时间复杂度(邻接表) O(n+e)O(n + e)O(n+e) O(n+e)O(n + e)O(n+e)

2.4 最小生成树:Prim vs Kruskal

对比项Prim算法Kruskal算法
贪心对象 每次选连接已选/未选集合的最小边 每次选全局最小边,不形成环则加入
数据结构 邻接矩阵 / 优先队列 并查集
时间复杂度 O(n2)O(n^2)O(n2) / O(elog⁡n)O(e \\log n)O(elogn) O(elog⁡e)O(e \\log e)O(eloge)
适合图类型 稠密图 稀疏图
是否需要起点 需要指定起点 不需要

2.5 最短路径:Dijkstra vs Floyd

对比项Dijkstra算法Floyd算法
解决的问题 单源最短路径 多源最短路径
核心思想 贪心(每次选dist最小的顶点) 动态规划(三重循环)
核心循环顺序 选点 + 松弛 kkk 在最外层(中转点)
时间复杂度 O(n2)O(n^2)O(n2) / O(elog⁡n)O(e \\log n)O(elogn) O(n3)O(n^3)O(n3)
是否支持负权边 ❌ 不支持 ✅ 支持(不能有负权环)
空间复杂度 O(n)O(n)O(n) O(n2)O(n^2)O(n2)

三、排序部分

3.1 八大排序全景对比表

排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性
插入排序 O(n2)O(n^2)O(n2) O(n)O(n)O(n) O(n2)O(n^2)O(n2) O(1)O(1)O(1) ✅ 稳定
希尔排序 O(n1.3)O(n^{1.3})O(n1.3) O(n)O(n)O(n) O(n2)O(n^2)O(n2) O(1)O(1)O(1) ❌ 不稳定
冒泡排序 O(n2)O(n^2)O(n2) O(n)O(n)O(n) O(n2)O(n^2)O(n2) O(1)O(1)O(1) ✅ 稳定
快速排序 O(nlog⁡n)O(n \\log n)O(nlogn) O(nlog⁡n)O(n \\log n)O(nlogn) O(n2)O(n^2)O(n2) O(log⁡n)O(\\log n)O(logn) ❌ 不稳定
简单选择 O(n2)O(n^2)O(n2) O(n2)O(n^2)O(n2) O(n2)O(n^2)O(n2) O(1)O(1)O(1) ❌ 不稳定
堆排序 O(nlog⁡n)O(n \\log n)O(nlogn) O(nlog⁡n)O(n \\log n)O(nlogn) O(nlog⁡n)O(n \\log n)O(nlogn) O(1)O(1)O(1) ❌ 不稳定
归并排序 O(nlog⁡n)O(n \\log n)O(nlogn) O(nlog⁡n)O(n \\log n)O(nlogn) O(nlog⁡n)O(n \\log n)O(nlogn) O(n)O(n)O(n) ✅ 稳定
基数排序 O(d(n+r))O(d(n+r))O(d(n+r)) O(d(n+r))O(d(n+r))O(d(n+r)) O(d(n+r))O(d(n+r))O(d(n+r)) O(n+r)O(n+r)O(n+r) ✅ 稳定

3.2 稳定性记忆

稳定(4个)不稳定(4个)
插入排序 希尔排序
冒泡排序 简单选择排序
归并排序 堆排序
基数排序 快速排序

记忆口诀:插冒归基(稳定),快选堆希(不稳定)

3.3 与初始顺序无关的算法

算法说明
简单选择排序 比较次数始终为 n(n−1)/2n(n-1)/2n(n1)/2
归并排序 始终对半分割
堆排序 复杂度稳定
基数排序 只按位分配,不依赖顺序

3.4 场景选型速查

应用场景推荐算法理由
数据基本有序 插入排序 接近 O(n)O(n)O(n)
数据量大、要求稳定 归并排序 O(nlog⁡n)O(n \\log n)O(nlogn) 且稳定
数据量大、内存紧张 堆排序 O(1)O(1)O(1) 空间
平均性能要求最高 快速排序 平均最快
固定位数数据(学号/身份证) 基数排序 不依赖比较,效率极高

四、易错点汇总

易错点正确理解
满二叉树一定是完全二叉树 ✅ 正确
完全二叉树一定是满二叉树 ❌ 错误(完全二叉树不一定是满二叉树)
二叉排序树的中序遍历是递减有序 ❌ 是递增有序
折半查找要求数据按升序排列 ❌ 升序或降序均可,但必须有序
平衡二叉树的平衡因子只能是 −1-11111 ❌ 可以是 −1,0,1-1, 0, 11,0,1
有向图中所有顶点的入度之和等于边数 ✅ 正确
强连通图至少需要 n−1n-1n1 条边 ❌ 至少需要 nnn 条边(构成环)
连通图至少需要 nnn 条边 ❌ 至少需要 n−1n-1n1 条边
无向图邻接表中所有链表节点总数为 eee ❌ 是 2e2e2e
DFS使用队列,BFS使用栈 ❌ DFS用栈,BFS用队列
Prim算法适合稀疏图 ❌ Prim适合稠密图,Kruskal适合稀疏图
Dijkstra可以处理负权边 ❌ 不能处理负权边
Floyd算法中转点应放在最内层 ❌ 中转点 kkk 应放在最外层
堆排序是稳定排序 ❌ 堆排序不稳定
快速排序在所有情况下都很快 ❌ 最坏情况 O(n2)O(n^2)O(n2)(已有序且基准选第一个时)

五、记忆口诀

二叉树性质:

iii 层最多 2i−12^{i-1}2i1,深度 kkk2k−12^k – 12k1n0=n2+1n_0 = n_2 + 1n0=n2+1,完全二叉树编号灵:左 2i2i2i2i+12i+12i+1

遍历:

前序根左右,中序左根右,后序左右根,层次用队列。

图术语:

连通图 n−1n-1n1,强连通图 nnn,完全图 n(n−1)/2n(n-1)/2n(n1)/2(无向)或 n(n−1)n(n-1)n(n1)(有向)。

图存储:

邻接矩阵 O(n2)O(n^2)O(n2) 适稠密,邻接表 O(n+e)O(n+e)O(n+e) 适稀疏。

最小生成树:

Prim从顶点长,稠密图它最强;Kruskal从边合,稀疏图它最妥。

最短路径:

Dijkstra贪心单源,负权边不能沾;Floyd动态多源,kkk 最外层是关键。

排序稳定性:

插冒归基(稳定),快选堆希(不稳定)。

六、进度回顾

板块完成篇数状态
1. 计算机系统知识 28篇 ✅ 已完成
2. 程序语言与编译 16篇 ✅ 已完成
3. 操作系统 28篇 ✅ 已完成
4. 软件工程 24篇 ✅ 已完成
5. 面向对象技术 16篇 ✅ 已完成
6. 数据结构与算法 30篇 ✅ 已完成
7. 数据库技术 20篇 即将开始

七、下期预告:板块7 – 数据库技术

预计更新 20篇,主要内容:

  • 数据库系统概述与三级模式
  • 数据模型(层次/网状/关系)
  • 关系代数与SQL
  • 规范化理论(1NF/2NF/3NF/BCNF)
  • 事务管理与并发控制
  • 数据库设计(ER图)

请持续关注本专栏,每日更新,陪你一起拿下软考中级!

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

#软考中级 #软件设计师 #树 #图 #排序算法 #复习日 #数据结构与算法 #软考备考

赞(0)
未经允许不得转载:171主机测评 » 【数据结构】复习日:树 + 图 + 排序(整理对比表)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址