擅长:python、mysql、java
<p>你的答案看来是正确的。让我们仔细看看原因。</p>
<p>在第一种情况下,你有堆:</p>
<pre><code>[98,67,89,38,42,54,89,17,25]
</code></pre>
<p>要插入97。所以你把它加到最后,然后把它泡起来:</p>
<pre><code>[98,67,89,38,42,54,89,17,25,97]
</code></pre>
<p>你把97和它的父母(42)作比较。因为97更大,所以可以交换它们:</p>
<pre><code>[98,67,89,38,97,54,89,17,25,42]
</code></pre>
<p>然后再将97与其父代进行比较。这次父母67岁了,所以你得再换一次。</p>
<pre><code>[98,97,89,38,67,54,89,17,25,42]
</code></pre>
<p>再比较一次,您会发现父项(98)大于您插入的项,这样就完成了。</p>
<p>现在,给定堆<code>[100,97,93,38,67,54,93,17,25,42]</code>,您需要删除两个最高的项。delete_max的规则是用堆中的最后一项替换根,然后向下筛选。所以你有:</p>
<pre><code> [42,97,93,38,67,54,93,17,25]
</code></pre>
<p>42比它的子代小,所以您可以将它与最大的子代交换:</p>
<pre><code> [97,42,93,38,67,54,93,17,25]
</code></pre>
<p>它大于38,但小于67,所以您再次交换:</p>
<pre><code> [97,67,93,38,42,54,93,17,25]
</code></pre>
<p>而42现在是叶级,所以没什么可做的了。这是第一个被删除的项目。现在删除第二个。将25移到根:</p>
<pre><code> [25,67,93,38,42,54,93,17]
</code></pre>
<p>然后筛选:</p>
<pre><code>[93,67,25,38,42,54,93,17] // swapped with 93
[93,67,93,38,42,54,25,17] // swapped with 93 again
</code></pre>