按以下顺序将以下数字插入最初为空的最小堆时,在每个阶段显示堆:{11, 17, 13, 4, 4, 1 }
。现在,当我们连续对堆执行deleteMin操作直到其为空时,显示每个阶段的堆。
这是我收到的答案/检查点:
![1]https://imgur.com/zu47RIF
我有两个问题,请:
我不知道何时第二次插入元素4
,为什么我们要移动11
使其成为旧元素/首次插入的元素4
的右子元素?是否因为我们要满足完整二叉树的要求,即从1
到k - 2
级别中的每个节点正好有2个子节点(k =树的级别,级别k是最底层的级别) )?
我不知道我们如何deleteMin = 1
,13
成为新父项11
的右孩子(这是4
的左孩子)。请注意,我的老师给了全班2种deleteMin方法。另一种方式对我来说很好-这只是插入的相反过程。
4
必须添加到17
的右侧以保留堆的形状: 4
/ \
11 13
/ \
17 4
之后,4
用11
切换位置以重新获得min-heap属性。
13
成为新的根: 13
/ \
4 4
/ \
17 11
然后13
用任一子节点切换位置。看起来他们在您的示例中选择了合适的孩子。