我是新手,并试图了解堆是如何工作的。你如何找出最小堆中的最大值?我知道可以通过查找根来找到最小值,但是最小堆中的最大值呢?不寻找代码,更多的是理论和理解。
答案 0 :(得分:2)
如图所示,很容易指出min-heap中的最大值。 在最小堆中,由于最小堆的规则,最大值将始终位于树的底部附近。父节点的值小于其子节点的值。因此,非常重要的是要记住最大值因此而没有任何孩子。
让我们说你得到了一个小堆。
2
3 7
6 4 10 15
12 14 9 8
在这个min-heap中只是通过非常明显地看出15是最大值,因为你只需要查看没有子节点且处于最小堆中的元素12,14,9,8,15。
答案 1 :(得分:1)
这只是一个技巧,可能比您需要的时间长一些,但如果您的堆包含数字,您可以这样做:
答案 2 :(得分:1)
min-heap的目的是让你在O(1)时间内找到最小元素(后面是堆积其余堆的O(Log n))。可以在O(1)中查找最小值和最大值,但仅使用增强数据结构。
但是,如果你坚持在min-heap中找到max元素,你可以通过提取min-heap的所有元素来做到这一点。从该最小堆中提取的最后一个元素将是最大元素。获得最大元素所需的时间将由O(n * Log n)限制。这个时间复杂度很容易导出 - 简单地记录n总计n次,