首页 > 试题广场 >

已知序列25, 13, 10, 12, 9 是大根堆,在序列

[单选题]

已知序列25, 13, 10, 12, 9 是大根堆,在序列尾部插入新元素 18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是( )。

  • 1
  • 2
  • 4
  • 5
不要忘了18与25还得比较一次
发表于 2017-09-20 17:04:00 回复(4)
把大根堆画成完全二叉树后,堆插入元素相当于是从最后面添加叶子节点18,先是18和10比较,18>10,将18与10对调,继续判断18与25的大小。 所以总共比较2次。
发表于 2017-03-10 08:56:53 回复(2)
答案是2次比较。此为大根堆的调整过程。
第一次:18与10比较
第二次:25与18比较
感谢@天涯恋 指出错误!
编辑于 2017-03-02 11:47:58 回复(5)
插入节点时,每次只要将当前节点和根节点比较一次,看是否需要调整。本题比较两次分别是18和10比较,调整后18和25比较。
发表于 2016-11-26 16:49:52 回复(0)
第一次:18跟10比较。第二次:18跟13比较。第三次:18跟25比较 。为什么没有第二次?如果题目说的是新元素为11,那步骤应该是:第一次 11跟10,第二次 11跟13,第三次13跟25吧?
编辑于 2019-07-09 00:00:26 回复(2)
要这么算的话,应该是10-18比较一次,13-12、13-9再比较两次,最后25-13、25-18再比较两次,总共5次了
发表于 2021-11-26 18:12:11 回复(1)
比较还是要比较的,不满足条件就不交换了
发表于 2020-11-27 13:18:42 回复(0)
这道题我认为答案错了,是3次,18先和10比较一次,13和18比较一次,25和18比较一次,共三次,如果有不对的,望指正
发表于 2021-10-29 18:37:55 回复(2)
比较次数与算法实现有关,2、3次均可
发表于 2022-10-01 17:03:00 回复(0)
常见疑问18和13用比么? 不用,因为大根堆 25大于左右儿子 即大于13 10 而我们 18 插入后更改的是10那个分支,如果新插入的大于25则替换掉25,因为13比25小 故不可能成为新的堆顶,故不用比。如果新插入的小于堆顶则调整到 25右儿子那里就停了。综上13从未比较过。
发表于 2022-09-05 15:22:59 回复(0)
自己画比完你就觉得他对了,但是其实他还要和25比一次。才能确定18的位置在哪。
发表于 2022-04-15 20:40:08 回复(0)
18和10比较完了以后, 我们默认不会再往上了, 因为上面的25比18大, 其实在心里已经又比较了一次了, 就是18 和25的比较, 所以是比较了两次
发表于 2021-04-03 08:04:49 回复(0)
<p>左子树已经是大根堆了,不受18的影响,所以不用比较</p><p><br></p>
发表于 2020-09-15 20:55:35 回复(0)
18不得在13的左面吗?!
发表于 2020-08-05 20:08:04 回复(0)

关键是看准什么是序列尾部,是完全树序号最后一个的下个序号的地方!不用全调,往上找路径上的点,挑这些即可。

发表于 2019-11-26 11:56:33 回复(0)
准确的说,应该是比较了4次,调整了2次
发表于 2018-09-10 07:58:13 回复(2)
比较的是两次,如果问交换的话就是一次,要看好题目问什么
编辑于 2018-03-11 14:40:41 回复(0)
我忘了 把 18 和 根节点25 再做一次比较。。。
发表于 2017-05-10 14:52:57 回复(0)