Функция treeprintprime
является рекурсивной функцией.
Он открывает файл, добавляет значение ключа, а затем повторяется. Если это был NULL-узел, файл был открыт без всякой цели. И только после того, как рекурсия вернулась, он закрывает файл.
Итак, вы открыли несколько (одинаковых) файлов, которые не закрываете до позднего времени.
В случае отсутствия кода, который можно попробовать, я предлагаю открыть и закрыть файл непосредственно до и после добавления, например
void treeprintprime(tNode* tree) {
if (tree != NULL) {
FILE* lasttree = fopen("lasttree.txt", "a"); // move the open function to here
// ** note check result of fopen() **
fprintf(lasttree, "%d ", tree->key);
fclose(lasttree); // move the close function to here
treeprintprime(tree->right);
treeprintprime(tree->left);
cout << tree->key << " "; // note this is C++ in tagged C code
}
}
Но еще лучше было бы открыть файл перед обходом дерева и затем закрыть его.