public void Delete(HeapNode node) { int i = node.GetIndexInHeap(); if (i < 0 || i > size) { throw new Exception(); } Swap(i, size - 1); size--; array[size].SetIndexInHeap(-1); if (array[i].GetKey() < array[size].GetKey()) { ShiftDown(i); } else { ShiftUp(i); } }
public void Update(HeapNode node, float newKeyValue) { int pos = node.GetIndexInHeap(); if (pos >= size || pos < 0) { throw new Exception(); } float oldkey = array[pos].GetKey(); array[pos].SetKey(newKeyValue); if (newKeyValue < oldkey) { ShiftDown(pos); } else { ShiftUp(pos); } }