首页 > 试题广场 >

(单选题){0, 2, 1, 4, ...

[单选题]
(单选题){0, 2, 1, 4, 3, 9, 5, 8, 6, 7} 是以数组形式存储的小顶堆,删除堆顶元素0后的结果是()
  • {2, 1, 4, 3, 8, 9, 5, 8, 6, 7}
  • {1, 2, 5, 4, 3, 9, 8, 6, 7}
  • {2, 3, 1, 4, 7, 9, 5, 8, 6}
  • {1, 2, 5, 4, 3, 9, 7, 8, 6}
删除堆顶,然后总是从堆尾将某个数先放置到堆顶,然后依次下调到符合完全二叉树的要求,即每个子树的两个子节点都比父节点大(最小堆)。过程如下图所示:
需要注意例如第三张图中,2和1在与7比较的时候,2和1先比较一次,哪个小再与7比较,如果比7小则互换,如果比7大则无需转换。
发表于 2019-04-11 11:45:45 回复(2)
删除堆顶,然后总是从堆尾将某个数先放置到堆顶,然后依次下调到符合完全二叉树的要求,即每个子树的两个子节点都比父节点大(最小堆)。过程如下图所示:
需要注意例如第三张图中,2和1在与7比较的时候,2和1先比较一次,哪个小再与7比较,如果比7小则互换,如果比7大则无需转换。
发表于 2019-05-24 18:34:07 回复(0)
删除堆顶,将堆尾节点转移至堆顶,再建堆。
建堆过程,左右节点先比较一次,小的再和其父节点比较。
发表于 2021-02-17 17:28:21 回复(0)
删除堆顶,然后总是从堆尾将某个数先放置到堆顶。
记住,从下往上调整,而不是从下往上调整就行了(比如删除0时,不是直接把最小的1填充上来,然后往下调整的)
发表于 2019-08-21 18:09:08 回复(0)
参照 JDK 中的 PriorityQueue 的堆实现方式,本质操作就是弹出队首元素,此时会将队尾元素取出,将其置于第一个位置起,做一次“下沉”操作。
而下沉操作的核心是:
  1. 比较左右孩子节点,选择对更小的孩子节点操作;
  2. 如果该节点大于那个孩子节点,则与孩子节点交换位置,否则下沉完毕;
  3. 继续对左右孩子节点操作。
发表于 2022-07-11 11:16:06 回复(0)
D
发表于 2020-10-23 10:14:04 回复(0)
A
发表于 2020-09-21 17:49:16 回复(0)
a
发表于 2020-07-07 22:07:11 回复(0)
D
发表于 2020-04-22 21:55:01 回复(0)
d
发表于 2020-04-18 00:16:46 回复(0)
C
发表于 2020-03-31 22:01:03 回复(0)

D

发表于 2019-12-13 07:21:21 回复(0)

先了解大小顶堆概念,然后删除节点/增加节点,

需要重新旋转二叉树使其达到平衡。

小顶堆:节点小于其左右孩子节点。

从下往上调整堆。

发表于 2019-10-06 16:39:26 回复(0)

D

发表于 2019-06-20 11:01:12 回复(0)
不知道为什么
发表于 2019-04-24 12:38:03 回复(0)