Короче говоря, я хотел бы изучить/разработать элегантный метод сохранения двоичного дерева на диск (обычное дерево, не обязательно BST). Вот описание моей проблемы:
Я реализую игру "20 вопросов". Я написал бинарное дерево, внутренние узлы которого — вопросы, а листья — ответы. Левый дочерний элемент узла — это путь, по которому вы пойдете, если кто-то ответит «да» на ваш текущий вопрос, а правый дочерний элемент — это ответ «нет». Обратите внимание, что это не бинарное дерево search, а просто бинарное дерево, у которого левый дочерний элемент — «да», а правый — «нет».
Программа добавляет узел к дереву, если встречает нулевой лист, предлагая пользователю отличить его ответ от того, о котором думал компьютер.
Это удобно, потому что дерево строится по мере того, как пользователь играет. Что не очень хорошо, так это то, что у меня нет хорошего способа сохранить дерево на диск.
Я думал о сохранении дерева в виде представления массива (для узла i левый дочерний элемент равен 2i+1, а правый 2i+2, (i-1)/2 для родителя), но это не чисто, и я получаю много потерянного места.
Любые идеи для элегантного решения для сохранения разреженного двоичного дерева на диск?