с записью процесса в файл, имея в виду, что процесс может быть завершен в любое время ... -> ведение журнала
размер байта узла изменяется, когда он становится родительским? посмотрим ...
у родительского узла есть вопрос (ссылка на строку)
родительский узел имеет узел да (ссылка на узел)
родительский узел не имеет узла (ссылка на узел)
листовой узел имеет ответ (ссылка на строку)
конечный узел может иметь 2 неиспользуемых ссылки на другие узлы ...
поэтому у узла есть строковая ссылка и 2 ссылки на узлы ...
если обе ссылки на узлы имеют значение NULL, это конечный узел, а строка ref является ответом ... иначе это родительский узел, а строка ref является вопросом ...
при сериализации в файл:
вы знаете, что узел имеет фиксированную длину: 3 указателя (ссылки)
поэтому ваша новая строковая ссылка будет иметь текущую позицию + 3 длины указателя
запишите этот адрес как строку ref ...
написать 2 пустые ссылки на данный момент ... (мы пока не знаем, где будут записаны эти узлы)
напишите строку
Обходите ваше дерево и помните, что вам нужно обновить пропущенные 2 ссылки на узлы, когда вы знаете положение узла в вашем файле ...
при обновлении узла (лист становится родительским):
записать новую строку вопроса в файл и сохранить ее адрес
сохранить адрес текущей строки ответа ...
заменить строковую ссылку в старом узле новым адресом строки вопроса
написать новый узел для старого ответа (строка ref является сохраненным адресом для текущего ответа) и обновить один из старых узлов - ссылки на узлы (соответственно да или нет)
написать новый узел для другого ответа (строковая ссылка может быть сохранена через 3 указателя, поэтому адрес известен)
напишите новую строку ответа
обновить старые узлы, ссылка на другой узел