diff --git a/data-structures/src/main/java/com/baeldung/graph/Graph.java b/data-structures/src/main/java/com/baeldung/graph/Graph.java index 16b7e04297..40df2c713a 100644 --- a/data-structures/src/main/java/com/baeldung/graph/Graph.java +++ b/data-structures/src/main/java/com/baeldung/graph/Graph.java @@ -2,6 +2,7 @@ package com.baeldung.graph; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Stack; @@ -29,7 +30,7 @@ public class Graph { while (!stack.isEmpty()) { int current = stack.pop(); isVisited[current] = true; - System.out.print(" " + current); + visit(current); for (int dest : adjVertices.get(current)) { if (!isVisited[dest]) stack.push(dest); @@ -44,29 +45,30 @@ public class Graph { private void dfsRecursive(int current, boolean[] isVisited) { isVisited[current] = true; - System.out.print(" " + current); + visit(current); for (int dest : adjVertices.get(current)) { if (!isVisited[dest]) dfsRecursive(dest, isVisited); } } - public void topologicalSort(int start) { - Stack result = new Stack(); + public List topologicalSort(int start) { + LinkedList result = new LinkedList(); boolean[] isVisited = new boolean[adjVertices.size()]; topologicalSortRecursive(start, isVisited, result); - while (!result.isEmpty()) { - System.out.print(" " + result.pop()); - } + return result; } - private void topologicalSortRecursive(int current, boolean[] isVisited, Stack result) { + private void topologicalSortRecursive(int current, boolean[] isVisited, LinkedList result) { isVisited[current] = true; for (int dest : adjVertices.get(current)) { if (!isVisited[dest]) topologicalSortRecursive(dest, isVisited, result); } - result.push(current); + result.addFirst(current); } + private void visit(int value) { + System.out.print(" " + value); + } } diff --git a/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java b/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java index ff73ee8e54..bb62714006 100644 --- a/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java +++ b/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java @@ -103,14 +103,14 @@ public class BinaryTree { public void traverseInOrder(Node node) { if (node != null) { traverseInOrder(node.left); - System.out.print(" " + node.value); + visit(node.value); traverseInOrder(node.right); } } public void traversePreOrder(Node node) { if (node != null) { - System.out.print(" " + node.value); + visit(node.value); traversePreOrder(node.left); traversePreOrder(node.right); } @@ -120,7 +120,7 @@ public class BinaryTree { if (node != null) { traversePostOrder(node.left); traversePostOrder(node.right); - System.out.print(" " + node.value); + visit(node.value); } } @@ -159,7 +159,7 @@ public class BinaryTree { stack.push(current); } current = stack.pop(); - System.out.print(" " + current.value); + visit(current.value); if(current.right != null) { current = current.right; stack.push(current); @@ -173,7 +173,7 @@ public class BinaryTree { stack.push(root); while(! stack.isEmpty()) { current = stack.pop(); - System.out.print(" " + current.value); + visit(current.value); if(current.right != null) stack.push(current.right); @@ -196,7 +196,7 @@ public class BinaryTree { if (!hasChild || isPrevLastChild) { current = stack.pop(); - System.out.print(" " + current.value); + visit(current.value); prev = current; } else { if (current.right != null) { @@ -209,6 +209,9 @@ public class BinaryTree { } } + private void visit(int value) { + System.out.print(" " + value); + } class Node { int value; diff --git a/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java b/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java index 249cb6e093..09b92115d2 100644 --- a/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java +++ b/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java @@ -1,5 +1,7 @@ package com.baeldung.graph; +import java.util.List; + import org.junit.Test; public class GraphUnitTest { @@ -15,7 +17,8 @@ public class GraphUnitTest { @Test public void givenDirectedGraph_whenGetTopologicalSort_thenPrintValuesSorted() { Graph graph = createDirectedGraph(); - graph.topologicalSort(0); + List list = graph.topologicalSort(0); + System.out.println(list); } private Graph createDirectedGraph() {