树(有向无环图)实现

时间: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许可。不过,我必须警告我们,实施自己的方法充满了危险。如果计划在结构(图形)上使用递归,则必须确保它是非循环的,否则会遇到无限循环问题。最好在已经解决问题的地方使用第三方代码。