public HeapNode <TObj> Remove(HeapNode <TObj> node) { if (!node.IsInHeap()) { //Debug.LogError("Removing node which is not in heap!"); return(null); } int i = node.index; int p = _buffer.Count - 1; _swap(i, p); _buffer.RemoveAt(p); node.RemoveFromHeap(); if (_buffer[i].heapValue > node.heapValue) { _downheap(i); } else { _upheap(i); } return(node); }
public HeapNode <TObj> Extract() { int p = _buffer.Count - 1; if (p < 0) { return(null); } _swap(0, p); HeapNode <TObj> dead = _buffer[p]; _buffer.RemoveAt(p); dead.RemoveFromHeap(); _downheap(0); return(dead); }