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 在右子树,这是允许的。

六 考点追踪

暂 无

相关推荐
小欣加油2 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
烬羽5 小时前
从零理解树与二叉树:用 JS 带你手撕遍历和递归
javascript·数据结构
YHL5 小时前
🚀从零理解树与二叉树 —— 概念、实现与遍历
前端·javascript·数据结构
JieE2126 小时前
JS 到底有多少种数据类型?从ECMA规范到内存本质,一文彻底搞懂
javascript·数据结构·面试
努力努力再努力wz6 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
八解毒剂7 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
Darling噜啦啦8 小时前
JavaScript 数组深度解析:从纯函数到二维数组陷阱,一文吃透前端数据结构核心
前端·javascript·数据结构
不会就选b10 小时前
数据结构之链表OJ题(中)
数据结构·链表
J2虾虾10 小时前
C语言 typedef 用法
c语言·数据结构·算法
budingxiaomoli11 小时前
二叉树中的深搜
数据结构