Я думаю, что это оптимальная реализация небольших деревьев, если она предназначена для обработки на одной машине. Если вы работаете с большими деревьями, вы должны разбить его на части дерева и сохранить, например, в виде кортежей (id, data, root_id).
Другим примером структуры данных для оценки PageRank в MapReduce является (url, currentPageRank, [link_url1, link_url2, ...])