考虑下面的例子。我正在向最小堆中添加随机数,同时在最大堆中以相同的顺序添加相同的数字。因此,在最后,这两个堆将有相同的数字,有差异,一个是最小堆,第二个是最大堆。
现在问题是:
如果我决定从最大堆中删除最大元素,那么最大元素是否总是位于最小堆的底部?如果不是,那么另一个问题是,如果我想从min堆中删除这个max元素,将其与min堆的最后一个元素交换,删除最后一个元素,那么我是否需要运行操作,该操作必须与其子元素进行比较才能修复min堆?还是总是将其与父类进行比较,以修复最小堆?
发布于 2016-11-07 11:43:47
根据最大堆的定义,根总是大于它的子根。然而,在儿童中并没有具体的排序,所以左孩子并不总是比右大,反之亦然。max堆的max元素(即根)必须位于min堆中的叶子上。我们不知道哪片叶子,这将取决于元素的配置。(即)插入这些元素的顺序,因为通常插入元素是为了填充从树的最左边到最右边)
https://stackoverflow.com/questions/40463852
复制相似问题