Вы можете проверить эту рекомендацию от Microsoft.
Это просто для изменения повсеместного B-дерева, чтобы быть персистентным. Просто всегда alloctate новый узел каждый раз, когда узел изменяется и возвращает новый узел рекурсивной вызывающей стороне, которая вставит его на том уровне путем выделения нового узла и т.д. Окончательный новый корневой узел возвращается. Не больше, чем O (регистрируют N) узлы выделяются на операцию.
Это - техника, используемая на функциональных языках для реализации, например, 2-3 дерева.
SQLite имеет реализацию структуры данных B-дерева, на которую можно смотреть;