I require a tree / directed acyclic graph implementation something like this:
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; }
- There is no sorting of any kind.
- The
TreeNode
is just a wrapper around the key and a possible value (nodes don’t have to have values set). - I require links to both the parent and the children.
Is there anything out there in the standard APIs or Commons etc that will do this for me?
I don’t mind writing it myself (and I’m certainly not asking you folks to) I just don’t want to re-invent the wheel.
Answer
There doesn’t seem to be anything of the kind. I asked a similar question last week and ended up implementing my own tree. My implementation was very similar to what you’re proposing:
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; } }
You will have to add a link back to the parent(s).