C++ 具有相同元素的最大和最小堆

C++ 具有相同元素的最大和最小堆,c++,heap,binary-heap,min-heap,max-heap,C++,Heap,Binary Heap,Min Heap,Max Heap,考虑下面的例子。我将随机数添加到最小堆中,同时将相同的数以相同的顺序添加到最大堆中。因此,在最后,这两个堆将有相同的数字,不同的是一个是最小堆,第二个是最大堆 现在有个问题: 如果我决定从max heap中删除最大元素,那么max heap中的最大元素是否总是位于min heap的底部?如果不是,那么另一个问题是,如果我想从min heap中删除max元素,并将其与min heap的最后一个元素交换,删除最后一个元素,那么我是否需要运行操作,该操作必须将该交换的元素与其子元素进行比较,以便修复m

考虑下面的例子。我将随机数添加到最小堆中,同时将相同的数以相同的顺序添加到最大堆中。因此,在最后,这两个堆将有相同的数字,不同的是一个是最小堆,第二个是最大堆

现在有个问题:


如果我决定从max heap中删除最大元素,那么max heap中的最大元素是否总是位于min heap的底部?如果不是,那么另一个问题是,如果我想从min heap中删除max元素,并将其与min heap的最后一个元素交换,删除最后一个元素,那么我是否需要运行操作,该操作必须将该交换的元素与其子元素进行比较,以便修复min heap?或者总是将其与父级进行比较以修复最小堆

根据最大堆的定义,根总是大于其子级。然而,孩子之间并没有特定的顺序,所以左孩子并不总是比右孩子大,反之亦然。max-heap的max元素(根)必须位于min-heap的叶子上。我们不知道是哪个叶,这取决于元素的配置。(即,插入这些元素的顺序,因为通常插入元素是为了从树的最左边到最右边填充)

您可能会对a感兴趣。在二进制堆中,插入元素总是为了从最左边到最右边填充。