Merge pull request #11858 from hkhan/JAVA-9909-fix-dfs-article
[JAVA-9909] Fix code for DFS article
This commit is contained in:
commit
15ba859709
|
@ -1,7 +1,5 @@
|
||||||
package com.baeldung.algorithms.dfs;
|
package com.baeldung.algorithms.dfs;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.Queue;
|
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
public class BinaryTree {
|
public class BinaryTree {
|
||||||
|
@ -124,69 +122,43 @@ public class BinaryTree {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void traverseLevelOrder() {
|
|
||||||
if (root == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Queue<Node> nodes = new LinkedList<>();
|
|
||||||
nodes.add(root);
|
|
||||||
|
|
||||||
while (!nodes.isEmpty()) {
|
|
||||||
|
|
||||||
Node node = nodes.remove();
|
|
||||||
|
|
||||||
System.out.print(" " + node.value);
|
|
||||||
|
|
||||||
if (node.left != null) {
|
|
||||||
nodes.add(node.left);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node.left != null) {
|
|
||||||
nodes.add(node.right);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void traverseInOrderWithoutRecursion() {
|
public void traverseInOrderWithoutRecursion() {
|
||||||
Stack<Node> stack = new Stack<Node>();
|
Stack<Node> stack = new Stack<>();
|
||||||
Node current = root;
|
Node current = root;
|
||||||
stack.push(root);
|
|
||||||
while(! stack.isEmpty()) {
|
while (current != null || !stack.isEmpty()) {
|
||||||
while(current.left != null) {
|
while (current != null) {
|
||||||
current = current.left;
|
|
||||||
stack.push(current);
|
|
||||||
}
|
|
||||||
current = stack.pop();
|
|
||||||
visit(current.value);
|
|
||||||
if(current.right != null) {
|
|
||||||
current = current.right;
|
|
||||||
stack.push(current);
|
stack.push(current);
|
||||||
|
current = current.left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Node top = stack.pop();
|
||||||
|
visit(top.value);
|
||||||
|
current = top.right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void traversePreOrderWithoutRecursion() {
|
public void traversePreOrderWithoutRecursion() {
|
||||||
Stack<Node> stack = new Stack<Node>();
|
Stack<Node> stack = new Stack<>();
|
||||||
Node current = root;
|
Node current;
|
||||||
stack.push(root);
|
stack.push(root);
|
||||||
while(! stack.isEmpty()) {
|
while(! stack.isEmpty()) {
|
||||||
current = stack.pop();
|
current = stack.pop();
|
||||||
visit(current.value);
|
visit(current.value);
|
||||||
|
|
||||||
if(current.right != null)
|
if(current.right != null)
|
||||||
stack.push(current.right);
|
stack.push(current.right);
|
||||||
|
|
||||||
if(current.left != null)
|
if(current.left != null)
|
||||||
stack.push(current.left);
|
stack.push(current.left);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void traversePostOrderWithoutRecursion() {
|
public void traversePostOrderWithoutRecursion() {
|
||||||
Stack<Node> stack = new Stack<Node>();
|
Stack<Node> stack = new Stack<>();
|
||||||
Node prev = root;
|
Node prev = root;
|
||||||
Node current = root;
|
Node current;
|
||||||
stack.push(root);
|
stack.push(root);
|
||||||
|
|
||||||
while (!stack.isEmpty()) {
|
while (!stack.isEmpty()) {
|
||||||
|
@ -206,14 +178,14 @@ public class BinaryTree {
|
||||||
stack.push(current.left);
|
stack.push(current.left);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private void visit(int value) {
|
|
||||||
System.out.print(" " + value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Node {
|
private void visit(int value) {
|
||||||
|
System.out.print(" " + value);
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Node {
|
||||||
int value;
|
int value;
|
||||||
Node left;
|
Node left;
|
||||||
Node right;
|
Node right;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package com.baeldung.algorithms.dfs;
|
package com.baeldung.algorithms.dfs;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class BinaryTreeUnitTest {
|
public class BinaryTreeUnitTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -13,7 +13,7 @@ public class BinaryTreeUnitTest {
|
||||||
|
|
||||||
BinaryTree bt = createBinaryTree();
|
BinaryTree bt = createBinaryTree();
|
||||||
|
|
||||||
assertTrue(!bt.isEmpty());
|
assertFalse(bt.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -111,14 +111,6 @@ public class BinaryTreeUnitTest {
|
||||||
bt.traversePostOrderWithoutRecursion();
|
bt.traversePostOrderWithoutRecursion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenABinaryTree_WhenTraversingLevelOrder_ThenPrintValues() {
|
|
||||||
|
|
||||||
BinaryTree bt = createBinaryTree();
|
|
||||||
|
|
||||||
bt.traverseLevelOrder();
|
|
||||||
}
|
|
||||||
|
|
||||||
private BinaryTree createBinaryTree() {
|
private BinaryTree createBinaryTree() {
|
||||||
BinaryTree bt = new BinaryTree();
|
BinaryTree bt = new BinaryTree();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue