Skip to content

2020年 408 数据结构 第 9 题

数据结构2020年选择题2分

题目

下列关于大根堆(至少含 个元素)的叙述中正确的是( )。

Ⅰ. 可以将堆看成一棵完全二叉树

Ⅱ. 可采用顺序存储方式保存堆

Ⅲ. 可以将堆看成一棵二叉排序树

Ⅳ. 堆中的次大值一定在根的下一层

错因

A

I 和 II 都判对,但漏掉了 IV。可能是凭直觉觉得"次大值不一定在根的下一层"——其实不然:堆里任何比根小的元素,能比根 "近"的位置只有根的两个孩子;如果次大值不在根的孩子位置,必然存在另一个比它大但不是根的元素,与"次大"矛盾。

B

把"堆"误等同于"二叉排序树"。两者结构都是二叉树但性质不同:BST 满足"左 < 根 < 右"的全序约束,中序遍历有序;而堆只满足"根 ≥ 孩子"(大根堆)的局部约束,中序遍历完全无序。选 III 是经典混淆。

D

错选 III(堆 ≠ BST)的同时漏选 II。漏 II 可能是受树的链式存储概念影响,认为堆这种树形结构应当用指针链接。其实堆是完全二叉树,正因如此才能用数组下标 算出父子位置(父 ,左孩子 ,右孩子 ),顺序存储既省空间又取址快——这恰恰是堆排序高效的物理基础。

总解析

逐条判断:

Ⅰ. 大根堆是完全二叉树。✓

堆的定义就是"满足堆性质的完全二叉树"。完全二叉树是除最后一层外每层都满、最后一层从左到右连续的二叉树。这是堆的结构基础。

Ⅱ. 堆可以顺序存储。✓

完全二叉树的天然优势:用一维数组按层序编号存储,下标 是根,下标 的父节点是 、左孩子是 、右孩子是 。无空隙、无指针开销,访问父子靠算术运算 O(1)。

Ⅲ. 堆是二叉排序树。✗

性质大根堆二叉排序树
约束方向父 ≥ 子(局部)左 < 根 < 右(全局)
中序遍历无序严格升序
兄弟之间大小无约束左子树 < 右子树

举个反例:大根堆 5(3, 4)(满足父 ≥ 子),但 BST 要求左 < 根 < 右,即左孩子 3 < 根 5 < 右孩子 4 —— 4 < 5 不满足。所以堆 ≠ BST。

Ⅳ. 大根堆中次大值一定在根的下一层。✓

证明:设根为 (最大值),次大值为

反设 不在根的下一层,即 不是根的孩子。那么 的父节点 既不是根、也不是 本身。

由大根堆性质,。又 是次大,意味着除根外没有比 大的元素,所以 。两式合得

是堆中不同位置上的两个元素( 的父亲),且堆中元素被视为可互不相等的关键字(408 默认情形),矛盾。

所以 必为根的孩子,即在根的下一层(第 2 层)。 ▢

注:若堆里允许有重复关键字,"次大值"通常仍指次大的位置,结论依然成立——次大位置至少有一个出现在根的下一层。

汇总:I、II、IV 正确,III 错误。

最终答案是 C(仅 Ⅰ、Ⅱ、Ⅳ)

易错点排序:把"堆 = BST"是最常见错误(占了 B、D 两个错项);漏选 IV 居其次(占了 A)。考前默念一遍:"堆是完全二叉树、顺序存、根最大、次大在第二层"。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数