Да, чертовски точно есть указатели в C #, но это называется небезопасным кодом, и вы не можете использовать их, если не указали, что это небезопасно.
Общие указатели не были разрешены, пока C # 7 не указал что-то, но теперь они разрешены, и код в вопросе может быть написан с использованием указателей.
Код в вопросе может быть переписан какниже:
unsafe struct HeapNode<T>
{
T* Data;
HeapNode<T>* Right; // in C++ it would be HeapNode* Right
HeapNode<T>* Left;
}
При компиляции с включенной опцией / unsafe.
Обратите внимание, что я не пытался скомпилировать не тестировать код, но это отправная точка для идеи.