代码之家  ›  专栏  ›  技术社区  ›  SCdF

树(有向无环图)实现

  •  12
  • SCdF  · 技术社区  · 16 年前

    我需要一个树/定向非循环图实现,类似于:

    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 回复  |  直到 8 年前
        1
  •  11
  •   Community CDub    8 年前

    似乎没有这种东西。我问 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;
        }
    }
    

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

        2
  •  5
  •   user10536    16 年前

    还有 http://www.jgrapht.org 在LGPL下拥有软件许可。不过,我必须警告你,实施自己的计划充满了危险。如果计划在结构上使用递归(这是一个图),那么必须确保它是非循环的,否则会遇到无限循环问题。最好在已经解决问题的地方使用第三方代码。

        3
  •  1
  •   Zach Scrivena    16 年前

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

        4
  •  0
  •   flicken    16 年前

    如果您正在寻找其他图形功能, JDigraph Digraph 课程应该符合要求。