Не уверен, что это элегантно, но это просто и объяснимо:
Назначьте уникальный идентификатор каждому узлу, будь то ствол или лист. Подойдет простое целое число.
При сохранении на диск просмотрите дерево, сохранив идентификатор каждого узла, идентификатор ссылки «да», идентификатор ссылки «нет» и текст вопроса или ответа. Для нулевых ссылок используйте ноль в качестве нулевого значения. Вы можете добавить флаг, чтобы указать, является ли вопрос или ответ, или, проще, проверить, являются ли обе ссылки нулевыми. Вы должны получить что-то вроде этого:
1,2,3,"Does it have wings?"
2,0,0,"a bird"
3,4,0,"Does it purr?"
4,0,0,"a cat"
Обратите внимание, что если вы используете последовательный целочисленный подход, сохранение идентификатора узла может быть избыточным, как показано здесь. Вы можете просто привести их в порядок по идентификатору.
Чтобы восстановить с диска, прочитайте строку, затем добавьте ее в дерево. Вероятно, вам понадобится таблица или массив для хранения узлов с прямой ссылкой, например, при обработке узла 1 вам нужно будет отслеживать 2 и 3, пока вы не сможете заполнить эти значения.