我有一个包含最大堆的数组表示。对于 'd','b','c' 的数组,它持有:b,d,c 尽管它应该是 b,c,d。这是我的添加方法:
public boolean add (E e) {
ensureCapacity(objectCount + 1);
pq[objectCount++] = e;
//percolate up
for (int i = objectCount - 1; i >= 0; i--) {
if (priorityComparator.compare(pq[i], pq[parent(i)]) >= 0) {
E tmp = pq[parent(i)];
pq[parent(i)] = pq[i];
pq[i] = tmp;
}
}
modCount++;
return true;
}
如果我接下来添加“a”,它会成功更改为 a、b、c、d。如何修复该方法,使其检查左孩子 (2*i+1) 和右孩子 (2*i+2) 并根据哪个具有更高优先级队列交换它们的值(a 的优先级高于 b, ETC)?