package edu.uci.ics.jung.graph; import java.util.Collection; /** * An interface for a graph which consists of a collection of rooted directed * acyclic graphs. * * @author Joshua O'Madadhain */ public interface Forest<V, E> extends DirectedGraph<V, E> { /** * Returns a view of this graph as a collection of <code>Tree</code> * instances. * * @return a view of this graph as a collection of <code>Tree</code>s */ Collection<Tree<V, E>> getTrees(); /** * Returns the parent of <code>vertex</code> in this tree. (If * <code>vertex</code> is the root, returns <code>null</code>.) The parent * of a vertex is defined as being its predecessor in the (unique) shortest * path from the root to this vertex. This is a convenience method which is * equivalent to * <code>Graph.getPredecessors(vertex).iterator().next()</code>. * * @return the parent of <code>vertex</code> in this tree * @see Graph#getPredecessors(Object) * @see #getParentEdge(Object) */ public V getParent(V vertex); /** * Returns the edge connecting <code>vertex</code> to its parent in this * tree. (If <code>vertex</code> is the root, returns <code>null</code>.) * The parent of a vertex is defined as being its predecessor in the * (unique) shortest path from the root to this vertex. This is a * convenience method which is equivalent to * <code>Graph.getInEdges(vertex).iterator().next()</code>, and also to * <code>Graph.findEdge(vertex, getParent(vertex))</code>. * * @return the edge connecting <code>vertex</code> to its parent, or * <code>null</code> if <code>vertex</code> is the root * @see Graph#getInEdges(Object) * @see #getParent(Object) */ public E getParentEdge(V vertex); /** * Returns the children of <code>vertex</code> in this tree. The children of * a vertex are defined as being the successors of that vertex on the * respective (unique) shortest paths from the root to those vertices. This * is syntactic (maple) sugar for <code>getSuccessors(vertex)</code>. * * @param vertex * the vertex whose children are to be returned * @return the <code>Collection</code> of children of <code>vertex</code> in * this tree * @see Graph#getSuccessors(Object) * @see #getChildEdges(Object) */ public Collection<V> getChildren(V vertex); /** * Returns the edges connecting <code>vertex</code> to its children in this * tree. The children of a vertex are defined as being the successors of * that vertex on the respective (unique) shortest paths from the root to * those vertices. This is syntactic (maple) sugar for * <code>getOutEdges(vertex)</code>. * * @param vertex * the vertex whose child edges are to be returned * @return the <code>Collection</code> of edges connecting * <code>vertex</code> to its children in this tree * @see Graph#getOutEdges(Object) * @see #getChildren(Object) */ public Collection<E> getChildEdges(V vertex); /** * Returns the number of children that <code>vertex</code> has in this tree. * The children of a vertex are defined as being the successors of that * vertex on the respective (unique) shortest paths from the root to those * vertices. This is syntactic (maple) sugar for * <code>getSuccessorCount(vertex)</code>. * * @param vertex * the vertex whose child edges are to be returned * @return the <code>Collection</code> of edges connecting * <code>vertex</code> to its children in this tree * @see #getChildEdges(Object) * @see #getChildren(Object) * @see Graph#getSuccessorCount(Object) */ public int getChildCount(V vertex); }