Package edu.uci.ics.jung.graph
Class DelegateForest<V,E>
- java.lang.Object
-
- edu.uci.ics.jung.graph.GraphDecorator<V,E>
-
- edu.uci.ics.jung.graph.DelegateForest<V,E>
-
- Type Parameters:
V- the vertex typeE- the edge type
- All Implemented Interfaces:
DirectedGraph<V,E>,Forest<V,E>,Graph<V,E>,Hypergraph<V,E>,java.io.Serializable
public class DelegateForest<V,E> extends GraphDecorator<V,E> implements Forest<V,E>
An implementation ofForestthat delegates to a specifiedDirectedGraphinstance.- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from class edu.uci.ics.jung.graph.GraphDecorator
delegate
-
-
Constructor Summary
Constructors Constructor Description DelegateForest()Creates an instance backed by a newDirectedSparseGraphinstance.DelegateForest(DirectedGraph<V,E> delegate)Creates an instance backed by the inputDirectedGraph.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddEdge(E edge, java.util.Collection<? extends V> vertices)Addsedgeto this graph.booleanaddEdge(E e, V v1, V v2, EdgeType edgeType)Add an edge to the tree, connecting v1, the parent and v2, the child.voidaddTree(Tree<V,E> tree)Addstreeto this graph as an element of this forest.booleanaddVertex(V vertex)Add vertex as a root of the treeintgetChildCount(V vertex)Returns the number of children thatvertexhas in this tree.java.util.Collection<E>getChildEdges(V vertex)Returns the edges connectingvertexto its children in this tree.java.util.Collection<V>getChildren(V v)Returns the children ofvertexin this tree.intgetDepth(V v)computes and returns the depth of the tree from the root to the passed vertexintgetHeight()computes and returns the height of the treeintgetIncidentCount(E edge)Returns the number of vertices that are incident toedge.VgetParent(V child)Returns the parent ofvertexin this tree.EgetParentEdge(V vertex)Returns the edge connectingvertexto its parent in this tree.java.util.List<V>getPath(V child)returns an ordered list of the nodes beginning at the root and ending at the passed child node, including all intermediate nodes.VgetRoot()java.util.Collection<V>getRoots()java.util.Collection<Tree<V,E>>getTrees()Returns a view of this graph as a collection ofTreeinstances.booleanisInternal(V v)booleanisLeaf(V v)booleanisRoot(V v)booleanremoveChild(V orphan)removes a node from the tree, causing all descendants of the removed node also to be removedbooleanremoveEdge(E edge)Removesedgefrom this tree, and the subtree rooted at the child vertex incident toedge.booleanremoveEdge(E edge, boolean remove_subtree)Removesedgefrom this tree.booleanremoveVertex(V vertex)Removesvertexfrom this tree, and the subtree rooted atvertex.booleanremoveVertex(V vertex, boolean remove_subtrees)Removesvertexfrom this tree.voidsetRoot(V root)adds root as a root of the tree-
Methods inherited from class edu.uci.ics.jung.graph.GraphDecorator
addEdge, addEdge, containsEdge, containsVertex, degree, findEdge, findEdgeSet, getDefaultEdgeType, getDest, getEdgeCount, getEdgeCount, getEdges, getEdges, getEdgeType, getEndpoints, getIncidentEdges, getIncidentVertices, getInEdges, getNeighborCount, getNeighbors, getOpposite, getOutEdges, getPredecessorCount, getPredecessors, getSource, getSuccessorCount, getSuccessors, getVertexCount, getVertices, inDegree, isDest, isIncident, isNeighbor, isPredecessor, isSource, isSuccessor, outDegree
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface edu.uci.ics.jung.graph.Graph
addEdge, getDest, getEndpoints, getInEdges, getOpposite, getOutEdges, getPredecessorCount, getPredecessors, getSource, getSuccessorCount, getSuccessors, inDegree, isDest, isPredecessor, isSource, isSuccessor, outDegree
-
Methods inherited from interface edu.uci.ics.jung.graph.Hypergraph
addEdge, containsEdge, containsVertex, degree, findEdge, findEdgeSet, getDefaultEdgeType, getEdgeCount, getEdgeCount, getEdges, getEdges, getEdgeType, getIncidentEdges, getIncidentVertices, getNeighborCount, getNeighbors, getVertexCount, getVertices, isIncident, isNeighbor
-
-
-
-
Constructor Detail
-
DelegateForest
public DelegateForest()
Creates an instance backed by a newDirectedSparseGraphinstance.
-
DelegateForest
public DelegateForest(DirectedGraph<V,E> delegate)
Creates an instance backed by the inputDirectedGraph.- Parameters:
delegate- the graph to which operations will be delegated
-
-
Method Detail
-
addEdge
public boolean addEdge(E e, V v1, V v2, EdgeType edgeType)
Add an edge to the tree, connecting v1, the parent and v2, the child. v1 must already exist in the tree, and v2 must not already exist the passed edge must be unique in the tree. Passing an edgeType other than EdgeType.DIRECTED may cause an illegal argument exception in the delegate graph.- Specified by:
addEdgein interfaceGraph<V,E>- Overrides:
addEdgein classGraphDecorator<V,E>- Parameters:
e- a unique edge to addv1- the parent nodev2- the child nodeedgeType- should be EdgeType.DIRECTED- Returns:
- true if this call mutates the underlying graph
- See Also:
Graph.addEdge(java.lang.Object, java.lang.Object, java.lang.Object, edu.uci.ics.jung.graph.util.EdgeType)
-
addVertex
public boolean addVertex(V vertex)
Add vertex as a root of the tree- Specified by:
addVertexin interfaceHypergraph<V,E>- Overrides:
addVertexin classGraphDecorator<V,E>- Parameters:
vertex- the tree root to add- Returns:
- true if this call mutates the underlying graph
- See Also:
Hypergraph.addVertex(java.lang.Object)
-
removeEdge
public boolean removeEdge(E edge)
Removesedgefrom this tree, and the subtree rooted at the child vertex incident toedge. (The subtree is removed to ensure that the tree in which the edge was found is still a tree rather than a forest. To change this behavior so that the- Specified by:
removeEdgein interfaceHypergraph<V,E>- Overrides:
removeEdgein classGraphDecorator<V,E>- Parameters:
edge- the edge to remove- Returns:
trueiff the tree was modified- See Also:
Hypergraph.removeEdge(java.lang.Object)
-
removeEdge
public boolean removeEdge(E edge, boolean remove_subtree)
Removesedgefrom this tree. Ifremove_subtreeistrue, removes the subtree rooted at the child vertex incident toedge. Otherwise, leaves the subtree intact as a new component tree of this forest.- Parameters:
edge- the edge to removeremove_subtree- iftrue, remove the subtree- Returns:
trueiff the tree was modified
-
removeVertex
public boolean removeVertex(V vertex)
Removesvertexfrom this tree, and the subtree rooted atvertex.- Specified by:
removeVertexin interfaceHypergraph<V,E>- Overrides:
removeVertexin classGraphDecorator<V,E>- Parameters:
vertex- the vertex to remove- Returns:
trueiff the tree was modified- See Also:
Hypergraph.removeVertex(java.lang.Object)
-
removeVertex
public boolean removeVertex(V vertex, boolean remove_subtrees)
Removesvertexfrom this tree. Ifremove_subtreesistrue, removes the subtrees rooted at the children ofvertex. Otherwise, leaves these subtrees intact as new component trees of this forest.- Parameters:
vertex- the vertex to removeremove_subtrees- iftrue, remove the subtrees rooted atvertex's children- Returns:
trueiff the tree was modified
-
getPath
public java.util.List<V> getPath(V child)
returns an ordered list of the nodes beginning at the root and ending at the passed child node, including all intermediate nodes.- Parameters:
child- the last node in the path from the root- Returns:
- an ordered list of the nodes from root to child
-
getParent
public V getParent(V child)
Description copied from interface:ForestReturns the parent ofvertexin this tree. (Ifvertexis the root, returnsnull.) 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 toGraph.getPredecessors(vertex).iterator().next().- Specified by:
getParentin interfaceForest<V,E>- Parameters:
child- the vertex whose parent is to be returned- Returns:
- the parent of
vertexin this tree - See Also:
Graph.getPredecessors(Object),Forest.getParentEdge(Object)
-
getRoot
public V getRoot()
- Returns:
- the root of the tree, or null if the tree has > 1 roots
-
setRoot
public void setRoot(V root)
adds root as a root of the tree- Parameters:
root- the initial tree root
-
removeChild
public boolean removeChild(V orphan)
removes a node from the tree, causing all descendants of the removed node also to be removed- Parameters:
orphan- the node to remove- Returns:
- whether this call mutates the underlying graph
-
getDepth
public int getDepth(V v)
computes and returns the depth of the tree from the root to the passed vertex- Parameters:
v- the node who's depth is computed- Returns:
- the depth to the passed node.
-
getHeight
public int getHeight()
computes and returns the height of the tree- Returns:
- the height
-
isInternal
public boolean isInternal(V v)
- Parameters:
v- the vertex to test- Returns:
trueifvis neither a leaf nor a root
-
isLeaf
public boolean isLeaf(V v)
- Parameters:
v- the vertex to test- Returns:
trueifvhas no child nodes.
-
getChildren
public java.util.Collection<V> getChildren(V v)
Description copied from interface:ForestReturns the children ofvertexin 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 forgetSuccessors(vertex).- Specified by:
getChildrenin interfaceForest<V,E>- Parameters:
v- the vertex whose children are to be returned- Returns:
- the children of
v. - See Also:
Graph.getSuccessors(Object),Forest.getChildEdges(Object)
-
isRoot
public boolean isRoot(V v)
- Parameters:
v- the vertex to test- Returns:
trueifvhas no parent node.
-
getIncidentCount
public int getIncidentCount(E edge)
Description copied from interface:HypergraphReturns the number of vertices that are incident toedge. For hyperedges, this can be any nonnegative integer; for edges this must be 2 (or 1 if self-loops are permitted).Equivalent to
getIncidentVertices(edge).size().- Specified by:
getIncidentCountin interfaceHypergraph<V,E>- Overrides:
getIncidentCountin classGraphDecorator<V,E>- Parameters:
edge- the edge whose incident vertex count is to be returned- Returns:
- the number of vertices that are incident to
edge. - See Also:
Hypergraph.getIncidentCount(java.lang.Object)
-
addEdge
public boolean addEdge(E edge, java.util.Collection<? extends V> vertices)
Description copied from interface:HypergraphAddsedgeto this graph. Fails under the following circumstances:edgeis already an element of the graph- either
edgeorverticesisnull verticeshas the wrong number of vertices for the graph typeverticesare already connected by another edge in this graph, and this graph does not accept parallel edges
- Specified by:
addEdgein interfaceHypergraph<V,E>- Overrides:
addEdgein classGraphDecorator<V,E>- Parameters:
edge- the edge to addvertices- the vertices to which the edge will be connected- Returns:
trueif the add is successful, andfalseotherwise- See Also:
Hypergraph.addEdge(java.lang.Object, java.util.Collection)
-
getRoots
public java.util.Collection<V> getRoots()
- Returns:
- the root of each tree of this forest as a
Collection.
-
getTrees
public java.util.Collection<Tree<V,E>> getTrees()
Description copied from interface:ForestReturns a view of this graph as a collection ofTreeinstances.
-
addTree
public void addTree(Tree<V,E> tree)
Addstreeto this graph as an element of this forest.- Parameters:
tree- the tree to add to this forest as a component
-
getChildCount
public int getChildCount(V vertex)
Description copied from interface:ForestReturns the number of children thatvertexhas 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 forgetSuccessorCount(vertex).- Specified by:
getChildCountin interfaceForest<V,E>- Parameters:
vertex- the vertex whose child edges are to be returned- Returns:
- the
Collectionof edges connectingvertexto its children in this tree - See Also:
Forest.getChildEdges(Object),Forest.getChildren(Object),Graph.getSuccessorCount(Object)
-
getChildEdges
public java.util.Collection<E> getChildEdges(V vertex)
Description copied from interface:ForestReturns the edges connectingvertexto 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 forgetOutEdges(vertex).- Specified by:
getChildEdgesin interfaceForest<V,E>- Parameters:
vertex- the vertex whose child edges are to be returned- Returns:
- the
Collectionof edges connectingvertexto its children in this tree - See Also:
Graph.getOutEdges(Object),Forest.getChildren(Object)
-
getParentEdge
public E getParentEdge(V vertex)
Description copied from interface:ForestReturns the edge connectingvertexto its parent in this tree. (Ifvertexis the root, returnsnull.) 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 toGraph.getInEdges(vertex).iterator().next(), and also toGraph.findEdge(vertex, getParent(vertex)).- Specified by:
getParentEdgein interfaceForest<V,E>- Parameters:
vertex- the vertex whose incoming edge is to be returned- Returns:
- the edge connecting
vertexto its parent, ornullifvertexis the root - See Also:
Graph.getInEdges(Object),Forest.getParent(Object)
-
-