Package edu.uci.ics.jung.graph
Class DelegateTree<V,E>
- java.lang.Object
-
- edu.uci.ics.jung.graph.GraphDecorator<V,E>
-
- edu.uci.ics.jung.graph.DelegateTree<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>
,Tree<V,E>
,java.io.Serializable
public class DelegateTree<V,E> extends GraphDecorator<V,E> implements Tree<V,E>
An implementation ofTree
that delegates to a specified instance ofDirectedGraph
.- Author:
- Tom Nelson
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected V
root
protected java.util.Map<V,java.lang.Integer>
vertex_depths
-
Fields inherited from class edu.uci.ics.jung.graph.GraphDecorator
delegate
-
-
Constructor Summary
Constructors Constructor Description DelegateTree()
Creates an instance.DelegateTree(com.google.common.base.Supplier<DirectedGraph<V,E>> graphFactory)
create an instance with passed values.DelegateTree(DirectedGraph<V,E> graph)
Creates a newDelegateTree
which delegates tograph
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
addChild(E edge, V parent, V child)
add the passed child node as a child of parent.boolean
addChild(E edge, V parent, V child, EdgeType edgeType)
add the passed child node as a child of parent.boolean
addEdge(E edge, java.util.Collection<? extends V> vertices)
Addsedge
to this graph.boolean
addEdge(E e, V v1, V v2)
Add an edge to the tree, connecting v1, the parent and v2, the child.boolean
addEdge(E e, V v1, V v2, EdgeType edgeType)
Add an edge to the tree, connecting v1, the parent and v2, the child.boolean
addVertex(V vertex)
Will set the root of the Tree, only if the Tree is empty and the root is currently unset.int
getChildCount(V parent)
get the number of children of the passed parent nodejava.util.Collection<E>
getChildEdges(V vertex)
Returns the edges connectingvertex
to its children in this tree.java.util.Collection<V>
getChildren(V parent)
get the immediate children nodes of the passed parentint
getDepth(V v)
computes and returns the depth of the tree from the root to the passed vertexstatic <V,E>
com.google.common.base.Supplier<Tree<V,E>>getFactory()
int
getHeight()
Computes and returns the height of the tree.int
getIncidentCount(E edge)
Returns the number of vertices that are incident toedge
.V
getParent(V child)
get the single parent node of the passed childE
getParentEdge(V vertex)
Returns the edge connectingvertex
to its parent in this tree.java.util.List<V>
getPath(V vertex)
Returns an ordered list of the nodes beginning at the root and ending atvertex
, including all intermediate nodes.V
getRoot()
getter for the root of the treejava.util.Collection<Tree<V,E>>
getTrees()
Returns a view of this graph as a collection ofTree
instances.boolean
isInternal(V v)
boolean
isLeaf(V v)
boolean
isRoot(V v)
boolean
removeChild(V orphan)
removes a node from the tree, causing all descendants of the removed node also to be removedboolean
removeVertex(V vertex)
remove the passed node, and all nodes that are descendants of the passed node.void
setRoot(V root)
sets the root to the passed value, only if the root is previously unsetjava.lang.String
toString()
-
Methods inherited from class edu.uci.ics.jung.graph.GraphDecorator
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, removeEdge
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface edu.uci.ics.jung.graph.Graph
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, removeEdge
-
-
-
-
Constructor Detail
-
DelegateTree
public DelegateTree()
Creates an instance.
-
DelegateTree
public DelegateTree(com.google.common.base.Supplier<DirectedGraph<V,E>> graphFactory)
create an instance with passed values.- Parameters:
graphFactory
- must create a DirectedGraph to use as a delegate
-
DelegateTree
public DelegateTree(DirectedGraph<V,E> graph)
Creates a newDelegateTree
which delegates tograph
. Assumes thatgraph
is already a tree; if it's not, future behavior of this instance is undefined.- Parameters:
graph
- the graph to which this instance will delegate operations.
-
-
Method Detail
-
getFactory
public static final <V,E> com.google.common.base.Supplier<Tree<V,E>> getFactory()
- Type Parameters:
V
- the vertex type for the graph SupplierE
- the edge type for the graph Supplier- Returns:
- a
Supplier
that creates an instance of this graph type.
-
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:
addEdge
in interfaceGraph<V,E>
- Overrides:
addEdge
in 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)
-
addEdge
public boolean addEdge(E e, V v1, V v2)
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.- Specified by:
addEdge
in interfaceGraph<V,E>
- Overrides:
addEdge
in classGraphDecorator<V,E>
- Parameters:
e
- a unique edge to addv1
- the parent nodev2
- the child node- Returns:
- true if this call mutates the underlying graph
- See Also:
Graph.addEdge(java.lang.Object, java.lang.Object, java.lang.Object)
-
addVertex
public boolean addVertex(V vertex)
Will set the root of the Tree, only if the Tree is empty and the root is currently unset.- Specified by:
addVertex
in interfaceHypergraph<V,E>
- Overrides:
addVertex
in classGraphDecorator<V,E>
- Parameters:
vertex
- the tree root to set- Returns:
- true if this call mutates the underlying graph
- Throws:
java.lang.UnsupportedOperationException
- if the root was previously set- See Also:
Hypergraph.addVertex(java.lang.Object)
-
removeVertex
public boolean removeVertex(V vertex)
remove the passed node, and all nodes that are descendants of the passed node.- Specified by:
removeVertex
in interfaceHypergraph<V,E>
- Overrides:
removeVertex
in classGraphDecorator<V,E>
- Parameters:
vertex
- the vertex to remove- Returns:
true
iff the tree was modified- See Also:
Hypergraph.removeVertex(java.lang.Object)
-
addChild
public boolean addChild(E edge, V parent, V child, EdgeType edgeType)
add the passed child node as a child of parent. parent must exist in the tree, and child must not already exist.- Parameters:
edge
- the unique edge to connect the parent and child nodesparent
- the existing parent to attach the child tochild
- the new child to add to the tree as a child of parentedgeType
- must be EdgeType.DIRECTED or the underlying graph may throw an exception- Returns:
- whether this call mutates the underlying graph
-
addChild
public boolean addChild(E edge, V parent, V child)
add the passed child node as a child of parent. parent must exist in the tree, and child must not already exist- Parameters:
edge
- the unique edge to connect the parent and child nodesparent
- the existing parent to attach the child tochild
- the new child to add to the tree as a child of parent- Returns:
- whether this call mutates the underlying graph
-
getChildCount
public int getChildCount(V parent)
get the number of children of the passed parent node- Specified by:
getChildCount
in interfaceForest<V,E>
- Parameters:
parent
- the vertex whose child edges are to be returned- Returns:
- the
Collection
of edges connectingvertex
to its children in this tree - See Also:
Forest.getChildEdges(Object)
,Forest.getChildren(Object)
,Graph.getSuccessorCount(Object)
-
getChildren
public java.util.Collection<V> getChildren(V parent)
get the immediate children nodes of the passed parent- Specified by:
getChildren
in interfaceForest<V,E>
- Parameters:
parent
- the vertex whose children are to be returned- Returns:
- the
Collection
of children ofvertex
in this tree - See Also:
Graph.getSuccessors(Object)
,Forest.getChildEdges(Object)
-
getParent
public V getParent(V child)
get the single parent node of the passed child- Specified by:
getParent
in interfaceForest<V,E>
- Parameters:
child
- the vertex whose parent is to be returned- Returns:
- the parent of
vertex
in this tree - See Also:
Graph.getPredecessors(Object)
,Forest.getParentEdge(Object)
-
getPath
public java.util.List<V> getPath(V vertex)
Returns an ordered list of the nodes beginning at the root and ending atvertex
, including all intermediate nodes.- Parameters:
vertex
- the last node in the path from the root- Returns:
- an ordered list of the nodes from root to child
-
getRoot
public V getRoot()
getter for the root of the tree
-
setRoot
public void setRoot(V root)
sets the root to the passed value, only if the root is previously unset- 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- Specified by:
getDepth
in interfaceTree<V,E>
- Parameters:
v
- the node who's depth is computed- Returns:
- the depth to the passed node.
- See Also:
Tree.getHeight()
-
getHeight
public int getHeight()
Computes and returns the height of the tree.- Specified by:
getHeight
in interfaceTree<V,E>
- Returns:
- the height
- See Also:
Tree.getDepth(Object)
-
isInternal
public boolean isInternal(V v)
- Parameters:
v
- the vertex to test- Returns:
true
ifv
is neither a leaf nor the root of this tree
-
isLeaf
public boolean isLeaf(V v)
- Parameters:
v
- the vertex to test- Returns:
true
ifv
has no children
-
isRoot
public boolean isRoot(V v)
- Parameters:
v
- the vertex to test- Returns:
true
ifv
has no parent
-
getIncidentCount
public int getIncidentCount(E edge)
Description copied from interface:Hypergraph
Returns 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:
getIncidentCount
in interfaceHypergraph<V,E>
- Overrides:
getIncidentCount
in 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:Hypergraph
Addsedge
to this graph. Fails under the following circumstances:edge
is already an element of the graph- either
edge
orvertices
isnull
vertices
has the wrong number of vertices for the graph typevertices
are already connected by another edge in this graph, and this graph does not accept parallel edges
- Specified by:
addEdge
in interfaceHypergraph<V,E>
- Overrides:
addEdge
in classGraphDecorator<V,E>
- Parameters:
edge
- the edge to addvertices
- the vertices to which the edge will be connected- Returns:
true
if the add is successful, andfalse
otherwise- See Also:
Hypergraph.addEdge(java.lang.Object, java.util.Collection)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
getTrees
public java.util.Collection<Tree<V,E>> getTrees()
Description copied from interface:Forest
Returns a view of this graph as a collection ofTree
instances.
-
getChildEdges
public java.util.Collection<E> getChildEdges(V vertex)
Description copied from interface:Forest
Returns the edges connectingvertex
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 forgetOutEdges(vertex)
.- Specified by:
getChildEdges
in interfaceForest<V,E>
- Parameters:
vertex
- the vertex whose child edges are to be returned- Returns:
- the
Collection
of edges connectingvertex
to its children in this tree - See Also:
Graph.getOutEdges(Object)
,Forest.getChildren(Object)
-
getParentEdge
public E getParentEdge(V vertex)
Description copied from interface:Forest
Returns the edge connectingvertex
to its parent in this tree. (Ifvertex
is 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:
getParentEdge
in interfaceForest<V,E>
- Parameters:
vertex
- the vertex whose incoming edge is to be returned- Returns:
- the edge connecting
vertex
to its parent, ornull
ifvertex
is the root - See Also:
Graph.getInEdges(Object)
,Forest.getParent(Object)
-
-