树(有向无环图)实现

时间:2008-09-27 22:37:14

标签: java data-structures tree graph-theory

我需要一个树/有向无环图实现,如下所示:

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等中是否有任何可以为我做这件事的事情?

我不介意自己写(我当然要求大家)我只是不想重新发明轮子。

4 个答案:

答案 0 :(得分:11)

似乎没有任何类似的东西。上周我问过a similar question并最终实现了我自己的树。我的实现与您提议的非常相似:

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;
    }
}

您必须将链接添加回父级。

答案 1 :(得分:5)

还有http://www.jgrapht.org,其中包含根据LGPL许可的软件。我必须警告你,实施你自己的工作充满了危险。如果您打算在结构上使用递归(这是一个图形),您必须确保它是非循环的,否则您将遇到无限循环问题。最好在他们已经处理过这些问题的地方使用第三方代码。

答案 2 :(得分:1)

我说最好推出自己的实现(此外,你已经很好地考虑了界面)。无论如何,您计划在此树上执行​​哪些操作?你可能想围绕你想要的东西设计你的API ...按键/值直接访问各个节点?遍历的类型?添加/删除操作?

答案 3 :(得分:0)

如果您正在寻找其他图表功能,JDigraphDigraph课程应符合要求。