Повышенная сериализация уже предложена, и это, безусловно, разумная возможность.
Многое зависит от того, как вы собираетесь использовать данные - тот факт, что вы используете многостраничное дерево в памяти, не означает, что вам обязательно нужно хранить его как многострочное дерево на диске. Поскольку вы (очевидно) уже расширяете границы того, что вы можете хранить в памяти, очевидный вопрос заключается в том, заинтересованы ли вы просто в сериализации данных, чтобы вы могли при необходимости воссоздать то же самое дерево или хотите ли вы что-то вроде базы данных, чтобы вы могли загружать части информации в память по мере необходимости и обновлять записи по мере необходимости.
Если вы хотите последнее, некоторые из ваших выборов также будут зависеть от того, насколько статична структура. Например, если конкретный узел имеет N дочерних элементов, является ли это число постоянным или подлежит изменению? Если это может быть изменено, есть ли ограничение на максимальное количество детей?
Если вы хотите иметь возможность просматривать структуру на диске, одна очевидная возможность будет заключаться в том, что при записи вы замените смещение файла соответствующих данных вместо используемого итератора в памяти.
В качестве альтернативы, поскольку похоже, что (по крайней мере, большинство) данных в отдельном узле имеет фиксированный размер, вы можете создать структуру базы данных в виде записей фиксированного размера, и в каждой записи записи номера записей родители / дети.
Знание общего размера заранее не особенно важно (случайно, я не могу придумать, каким образом я бы использовал размер, даже если он был известен заранее).