package prefuse.data; import java.util.Iterator; /** * Tuple sub-interface that represents a node in a graph or tree structure. * This interface supports both graph and tree methods, tree methods invoked * on a node in a general graph typically default to operations on the * graph's generated spanning tree. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public interface Node extends Tuple { /** * Get the Graph of which this Node is a member. * @return the backing Graph. */ public Graph getGraph(); // ------------------------------------------------------------------------ // Graph Methods /** * Get the in-degree of the node, the number of edges for which this node * is the target. * @return the in-degree of the node */ public int getInDegree(); /** * Get the out-degree of the node, the number of edges for which this node * is the source. * @return the out-degree of the node */ public int getOutDegree(); /** * Get the degree of the node, the number of edges for which this node * is either the source or the target. * @return the total degree of the node */ public int getDegree(); /** * Get an iterator over all incoming edges, those for which this node * is the target. * @return an Iterator over all incoming edges */ public Iterator inEdges(); /** * Get an iterator over all outgoing edges, those for which this node * is the source. * @return an Iterator over all outgoing edges */ public Iterator outEdges(); /** * Get an iterator over all incident edges, those for which this node * is either the source or the target. * @return an Iterator over all incident edges */ public Iterator edges(); /** * Get an iterator over all adjacent nodes connected to this node by an * incoming edge (i.e., all nodes that "point" at this one). * @return an Iterator over all neighbors with in-links on this node */ public Iterator inNeighbors(); /** * Get an iterator over all adjacent nodes connected to this node by an * outgoing edge (i.e., all nodes "pointed" to by this one). * @return an Iterator over all neighbors with out-links from this node */ public Iterator outNeighbors(); /** * Get an iterator over all nodes connected to this node. * @return an Iterator over all neighbors of this node */ public Iterator neighbors(); // ------------------------------------------------------------------------ // Tree Methods /** * Get the parent node of this node in a tree structure. * @return this node's parent node, or null if there is none. */ public Node getParent(); /** * Get the edge between this node and its parent node in a tree * structure. * @return the edge between this node and its parent */ public Edge getParentEdge(); /** * Get the tree depth of this node. * @return the tree depth of this node. The root's tree depth is * zero, and each level of the tree is one depth level greater. */ public int getDepth(); /** * Get the number of tree children of this node. * @return the number of child nodes */ public int getChildCount(); /** * Get the ordering index of the give node child in a tree * structure. * @param child the child node to look up * @return the index of the child node, or -1 if the node is * not a child of this one. */ public int getChildIndex(Node child); /** * Get the tree child node at the given index. * @param idx the ordering index * @return the child node at the given index */ public Node getChild(int idx); /** * Get this node's first tree child. This is the * same as looking up the node at index 0. * @return this node's first child node */ public Node getFirstChild(); /** * Get this node's last tree child. This is the * same as looking up the node at the child count * minus 1. * @return this node's last child node */ public Node getLastChild(); /** * Get this node's previous tree sibling. * @return the previous sibling, or null if none */ public Node getPreviousSibling(); /** * Get this node's next tree sibling. * @return the next sibling, or null if none */ public Node getNextSibling(); /** * Get an iterator over this node's tree children. * @return an iterator over this node's children */ public Iterator children(); /** * Get an iterator over the edges from this node to its tree children. * @return an iterator over the edges to the child nodes */ public Iterator childEdges(); } // end of interface Node