408真题解析-2009-9-数据结构-小根堆-排序

说明:本文参考了启航25版本、竟成25版本、王道25版本、考研官方推荐教材、互联网资料以及结合个人的理解整理。本人水平有限,若有不对之处,烦请指正。

一 真题2009-9

  1. 已知关键字序列5,8,12,19,28,20,15,22 是小根堆(最小堆)插入关键字3,调整后得到的小根堆是()。

A. 3,5,12,8,28,20,15,22,19

B. 3,5,12,19,20,15,22,8,28

C. 3,8,12,5,20,15,22,28,19

D. 3,12,5,8,28,20,15,22,19

二 读题

本题考察小根堆的调整

三 哔哔详解

小根堆插入规则:首先新元素放入堆尾,然后不断向上调整(与父结点比较,若小于则交换,直至满足堆性质)。

第一步 确认原堆

复制代码
          5
       /     \
      8       12
    /  \     /  \
   19  28   20   15
  /
 22

第二步 插入关键字3

复制代码
          5
       /     \
      8       12
    /  \     /  \
   19  28   20   15
  / \
 22  3   ← 新插入的 3

第三步向上调整:

  • 当前节点:下标 8,值 = 3
  • 父节点(8 - 1) // 2 = 3,值 = 19
    → 3 < 19 → 交换

数组变为:[5, 8, 12, 3, 28, 20, 15, 22, 19]

树结构:

复制代码
          5
       /     \
      8       12
    /  \     /  \
   3   28   20   15
  / \
22  19
  • 当前节点:下标 3,值 = 3
  • 父节点(3 - 1) // 2 = 1,值 = 8
    → 3 < 8 → 交换

数组变为:[5, 3, 12, 8, 28, 20, 15, 22, 19]

树结构:

复制代码
          5
       /     \
      3       12
    /  \     /  \
   8   28   20   15
  / \
22  19
  • 当前节点:下标 1,值 = 3
  • 父节点(1 - 1) // 2 = 0,值 = 5
    → 3 < 5 → 交换

数组变为:[3, 5, 12, 8, 28, 20, 15, 22, 19]

树结构:

复制代码
          3        ← 根
       /     \
      5       12
    /  \     /  \
   8   28   20   15
  / \
22  19
  • 当前节点在根(下标 0),停止调整。

最终堆数组:[3, 5, 12, 8, 28, 20, 15, 22, 19] 故选 A

四 参考答案

参考答案 A

五 考点精析

5.1 堆的存储结构

  • 堆是完全二叉树 ,用一维数组按层序(level order)存储
  • 下标关系(从 0 开始):
    • 父节点:parent = (i - 1) // 2 (整数除法,向下取整)
    • 左孩子:left = 2i + 1
    • 右孩子:right = 2i + 2

5.2 插入操作的调整

  • 插入向上调整(sift-up)

  • 删除堆顶向下调整(sift-down)

  • 本题考的是插入 + 向上冒泡

5.3 小根堆性质

  • 任意节点 ≤ 其子节点
  • 不要求左右子树有序,只要求父子关系满足即可
  • 数组中不是排序数组 !例如 [3,5,12,8,...] 中 8 < 12,但 8 在左子树、12 在右子树,这是允许的。

六 考点追踪

暂 无

相关推荐
D_FW1 天前
数据结构第二章:线性表
数据结构·算法
tobias.b1 天前
408真题解析-2009-8-数据结构-B树-定义及性质
数据结构·b树·计算机考研·408考研·408真题
hk11241 天前
【Architecture/Refactoring】2026年度企业级遗留系统重构与高并发架构基准索引 (Grandmaster Edition)
数据结构·微服务·系统架构·数据集·devops
im_AMBER1 天前
Leetcode 95 分割链表
数据结构·c++·笔记·学习·算法·leetcode·链表
无限进步_1 天前
【C语言】堆(Heap)的数据结构与实现:从构建到应用
c语言·数据结构·c++·后端·其他·算法·visual studio
再难也得平1 天前
两数之和和字母异位词分组
数据结构·算法
黎雁·泠崖1 天前
【线性表系列入门篇】从顺序表到链表:解锁数据结构的进化密码
c语言·数据结构·链表
橘颂TA1 天前
【剑斩OFFER】哈希表简介
数据结构·算法·散列表
小尧嵌入式1 天前
c++红黑树及B树B+树
开发语言·数据结构·c++·windows·b树·算法·排序算法