Код при публикации имеет неопределенное поведение. кроме рекурсии вы говорите:
char * out;
sprintf(out, "%s:%.2f", node->name, node->distance);
Другими словами, вы пытаетесь вывести неинициализированный указатель, который является неопределенным поведением и, следовательно, не имеет смысла.
Если вы спрашиваете, могу ли я использовать sprintf в рекурсивной функции для добавления информации в буфер, ответ возможно, но не так просто. Вам потребуется поддерживать буфер для каждого рекурсивного вызова, а также индекс для буфера, который будет обновлять каждый вызов.