// The user must call this function to signal that a key has been decresed.
    // The function will then remove the node and subnodes from the heap, then
    // merge them back in. The user gets the heap node reference from insert.
    public void decreaseKey(HeapNode <T> node)
    {
        if (node == top || node == null || top == null)
        {
            return;
        }

        node.extract();

        if (merge(top, node) == node)// Node has become new top
        {
            top = node;
        }
    }