对于基本的建模,你应该使用复合模式:
public class TreeNode {
private String id;
private TreeNode parent;
private List<TreeNode> treeNodes = new ArrayList<>();
...
}
每个节点都有一个串ID,其父的引用,引用它的孩子。 您可以通过在getParent()上迭代来获得顶级根,直到其为空(使用递归)。
为了解析这些路径设想是这样的:
public TreeNode get(final String path) {
if (!path.isEmpty()) {
for (TreeNode treeNode : treeNodes) {
if (path.startsWith(treeNode.getId())) {
return treeNode.get(path.substring(...));
}
}
}
return this;
}
现在,如果你正在寻找一种方法来存储这种数据(图表等),并具有高性能的查询就可以了,你可以考虑使用图形数据库作为@sebgymn提到:Neo4j是一个很好的java数据库。
这是关于在NOSQL中使用连接数据模型。节点将数据存储在属性中,关系也被存储并在Neo4j中明确命名,并充当节点之间的链接。然后,您可以在Node上执行查询(属性,与其他人的关系...)。
这里是链接到一个演示:http://fr.slideshare.net/neo4j/data-modeling-with-neo4j
一个伟大的教程:http://technoracle.blogspot.fr/2012/04/getting-started-with-neo4j-beginners.html
的测试图形数据库执行查询:http://www.neo4j.org/learn/cypher
例如:你可以尝试实施多层次模式neo4j中的树(就像你的情况一样,检查顶层根是很重要的:所以你的模型看起来在树上有不同的层次)。
虽然没有摆动相关,但实现TreeNode始终是一个好的开始。然后,您可以复制TreeNode并使用相同的方法创建您自己的自定义界面。 – MightyPork
可能是一个矫枉过正的问题,但是如何使用[Neo4j](http://www.neo4j.org/)? – bekce
你是什么意思,“在任何节点,我应该知道谁是根节点”?是不是只有一个根?你的树是否以任何方式平衡? –