Das, was du erreichen willst, wäre durch eine Queue möglich. Allerdings arbeitest du mit Listen, also ist das auch mit einer Liste sehr leicht machbar.
[code=Java]private static void iterate(Node node, List<Node> nodes) {
List<Node> outgoing = node.getOutcomingNodes(); // outcoming hört sich ja echt doof an
Node curr = node;
while(outcoming.size() > 0) {
curr = outgoing.remove(0);
nodes.add(curr);
System.out.println(curr);
for(Node n : curr.getOutComingNodes())
if(!nodes.contains(n))
outgoing.add(n);
}
}[/code]
So ungefähr.
Ja, ist eine ganz normale Breitensuche!
[code=Java]private static void iterate(Node node) {
if(node == null)
throw new IllegalArgumentException();
List<Node> outgoing = new ArrayList<>();
Set<Node> visited = new HashSet<>();
visited.add( node );
do {
System.out.println( node );
for( Node n : node.getOutgoingNodes() )
if( !visited.contains( n ) ) {
visited.add( n );
outgoing.add( n );
}
} while( outgoing.size() > 0 && ( node = outgoing.remove( 0 ) ) != null );
}[/code]