示例#1
0
        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);
        }
示例#2
0
        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);
        }