У меня есть иерархические данные. что-то вроде:Иерархический дизайн структуры данных
Ниже приведены характеристики:
- Узел может иметь любое количество детей
- Узлы могут быть помечены как специальные. После того, как узел отмечен специальным, все поддерево, начиная с этого узла, становится особенным.
Ниже перечислены операции, которые я хочу выполнить:
Tree.get("a.b.d.g")
должен дать мне узелg
Tree.set("a.b.d.g",value)
которые устанавливают значение- узла
g
«s в любом узле, я должен знать, кто корневой узел - на любом узле я должен, если я являюсь частью специального поддерева
- Я должен иметь возможность копировать/перемещать поддерево в другое дерево
- Я могу добавить новые узлы или удалять новые узлы на каждом уровне
- я должен быть в состоянии сериализовать эти данные
я могу в настоящее время подумайте о структуре «хэшмапа хэшмапов». Я всегда могу кэшировать ответ на операции 3 и 4 на каждом узле. Конечно, мне нужно очистить этот кеш, когда я копирую или перемещаю и т. Д.
Есть ли другие способы реализации для достижения наилучшей производительности из-за вышеперечисленных операций с минимальным размером памяти.
Не связанное с качанием, внедрение TreeNode всегда хорошее начало. Затем вы можете скопировать TreeNode и создать свой собственный интерфейс с помощью тех же методов. – MightyPork
Может быть излишним, но как насчет использования [Neo4j] (http://www.neo4j.org/)? – bekce
Что вы подразумеваете под «на любом узле, который должен знать, кто является корневым узлом»? Разве нет только одного корня? И ваше дерево сбалансировано? –