树(有向无环图)实现
时间:2020-03-06 14:50:00 来源:igfitidea点击:
我需要一个像这样的树/有向无环图实现:
public class TreeNode<K, V> { private K key; // 'key' for this node, always present private V value; // 'value' for this node, doesn't have to be set private TreeNode<K, V> parent; private Set<TreeNode<K, V>> children; }
- 没有任何种类的排序。
- TreeNode只是键和可能值的包装(节点不必设置值)。
- 我需要链接到父母和孩子。
标准API或者Commons等中有什么可以帮到我吗?
我不介意自己编写它(我当然也不会要求你们这样做),我只是不想重新发明轮子。
解决方案
似乎没有任何种类的东西。上周,我问了一个类似的问题,并最终实现了我自己的树。我的实现与我们所建议的非常相似:
public class TreeNode<T> { private LinkedList<TreeNode<T>> children = new LinkedList<TreeNode<T>>(); public T value { get; set; } public TreeNode(T value) { this.value = value; } public LinkedList<TreeNode<T>> GetChildren() { return children; } }
我们将必须添加一个链接返回到父级。
我想说最好是推出自己的实现(此外,我们已经对接口进行了深思熟虑)。我们计划在此树上执行哪些操作?我们可能想围绕我们想要的东西设计API ...通过键/值直接访问各个节点?遍历的类型?添加/删除操作?
如果我们正在寻找其他图形功能,则JDigraph的Digraph类应该适合我们。
还有http://www.jgrapht.org,该软件已获得LGPL许可。不过,我必须警告我们,实施自己的方法充满了危险。如果计划在结构(图形)上使用递归,则必须确保它是非循环的,否则会遇到无限循环问题。最好在已经解决问题的地方使用第三方代码。