如何证明最小堆中的最大项目必须位于其中一个树叶中,在包含N个项目的树中?
我理解最小堆的整体设计,并且我可以显示/图表最大项位于其中一个叶子(深度为N + 1的节点>深度为N的节点)。我不确定如何格式化证据。
答案 0 :(得分:1)
首先,请注意“heap”属性要求以非叶子节点为根的子树也应该保持堆属性,因为它们也是堆。对于min-heap,“heap”属性是root值应该小于子节点的值。
如果最小堆的任何非叶节点保存最大项,则违反其根是当前非叶节点的子树的堆属性,因为此子树的子值小于根值。要保持堆属性,必须将根值向下浮动到其中一个子级。
为了不违反“heap”属性,“maximum”项的向下浮动将继续,直到保持最大值的节点不再有子节点。因此,“最大”项将始终位于没有子节点的节点(即叶节点)。
答案 1 :(得分:1)
简单地说明答案,假设为了矛盾,最大值是非叶子。这违反了堆属性,对于min-heap,要求节点小于其子节点的值。因此,最大值必须在叶子中。