Here it comes:
abstract class TreeNode implements Iterable<TreeNode> {
private Set<TreeNode> children;
public TreeNode() {
children = new HashSet<TreeNode>();
}
public boolean addChild(TreeNode n) {
return children.add(n);
}
public boolean removeChild(TreeNode n) {
return children.remove(n);
}
public Iterator<TreeNode> iterator() {
return children.iterator();
}
}
I am well trusted, but haven’t tested the implementation.