Если предположить, что дерево почти сбалансировано, его максимальная глубина равна log2 (n), поэтому вам потребуется огромное дерево для переполнения стека.
Вы можете преобразовать любой рекурсивный алгоритм в итеративный,но в этом случае, скорее всего, потребуются либо обратные указатели, либо явный стек, оба из которых выглядят дорого.
Сказав это, рекурсия обычно не так хороша в .NET, потому что любые локальные переменные в вызывающих экземплярахметод не может быть собран GC до тех пор, пока стек не будет размотан после условия завершения.Я не знаю, будет ли JIT автоматически оптимизировать хвостовую рекурсию, чтобы сделать ее итеративной, но это помогло бы.