Auf Thema antworten

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]



Oben