From 99c1e4f47552a6a028f6dd43cd62354e83a9fc9d Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Wed, 20 Nov 2019 00:33:12 +0100 Subject: [PATCH 1/8] Add source code for BAEL-3408 --- .../baeldung/binarytree/BinaryTreeModel.java | 37 ++++++ .../binarytree/BinaryTreePrinter.java | 62 +++++++++ .../binarytree/PrintingBinaryTreeTest.java | 124 ++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java create mode 100644 core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java new file mode 100644 index 0000000000..6c62a60d01 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java @@ -0,0 +1,37 @@ +package com.baeldung.binarytree; + +public class BinaryTreeModel { + + private Object value; + private BinaryTreeModel left; + private BinaryTreeModel right; + + public BinaryTreeModel(Object value) { + this.value = value; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + public BinaryTreeModel getLeft() { + return left; + } + + public void setLeft(BinaryTreeModel left) { + this.left = left; + } + + public BinaryTreeModel getRight() { + return right; + } + + public void setRight(BinaryTreeModel right) { + this.right = right; + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java new file mode 100644 index 0000000000..d425bd7003 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java @@ -0,0 +1,62 @@ +package com.baeldung.binarytree; + +public class BinaryTreePrinter { + + private BinaryTreeModel tree; + + public BinaryTreePrinter(BinaryTreeModel tree) { + this.tree = tree; + } + + private String traversePreOrder(BinaryTreeModel root) { + + if (root == null) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + sb.append(root.getValue()); + sb.append("\n"); + + String pointerRight = "└──"; + String pointerLeft = (root.getRight() != null) ? "├──" : "└──"; + + traverseNodes(sb, "", pointerLeft, root.getLeft(), root.getRight() != null); + traverseNodes(sb, "", pointerRight, root.getRight(), false); + + return sb.toString(); + } + + private void traverseNodes(StringBuilder sb, String padding, String pointer, BinaryTreeModel node, + boolean hasRightSibling) { + + if (node != null) { + + sb.append(padding); + sb.append(pointer); + sb.append(node.getValue()); + sb.append("\n"); + + StringBuilder paddingBuilder = new StringBuilder(padding); + if (hasRightSibling) { + paddingBuilder.append("│ "); + } else { + paddingBuilder.append(" "); + } + + String paddingForBoth = paddingBuilder.toString(); + String pointerRight = "└──"; + String pointerLeft = (node.getRight() != null) ? "├──" : "└──"; + + traverseNodes(sb, paddingForBoth, pointerLeft, node.getLeft(), node.getRight() != null); + traverseNodes(sb, paddingForBoth, pointerRight, node.getRight(), false); + + } + + } + + public void print() { + System.out.println(traversePreOrder(tree)); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java new file mode 100644 index 0000000000..e822737c19 --- /dev/null +++ b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java @@ -0,0 +1,124 @@ +package com.baeldung.binarytree; + +import org.junit.Before; +import org.junit.Test; + +public class PrintingBinaryTreeTest { + + private BinaryTreeModel balanced; + private BinaryTreeModel leftUnbalanced; + private BinaryTreeModel rightUnbalanced; + + @Before + public void setup() { + balanced = createBalancedTree(); + leftUnbalanced = createLeftUnbalancedTree(); + rightUnbalanced = createRightUnbalancedTree(); + } + + private BinaryTreeModel createBalancedTree() { + + BinaryTreeModel root = new BinaryTreeModel("root"); + + BinaryTreeModel node1 = new BinaryTreeModel("node1"); + BinaryTreeModel node2 = new BinaryTreeModel("node2"); + root.setLeft(node1); + root.setRight(node2); + + BinaryTreeModel node3 = new BinaryTreeModel("node3"); + BinaryTreeModel node4 = new BinaryTreeModel("node4"); + node1.setLeft(node3); + node1.setRight(node4); + + BinaryTreeModel node5 = new BinaryTreeModel("node5"); + BinaryTreeModel node6 = new BinaryTreeModel("node6"); + node2.setLeft(node5); + node2.setRight(node6); + + BinaryTreeModel node7 = new BinaryTreeModel("node7"); + node3.setLeft(node7); + + BinaryTreeModel node8 = new BinaryTreeModel("node8"); + BinaryTreeModel node9 = new BinaryTreeModel("node9"); + node7.setLeft(node8); + node7.setRight(node9); + + return root; + } + + private BinaryTreeModel createLeftUnbalancedTree() { + + BinaryTreeModel root = new BinaryTreeModel("left"); + + BinaryTreeModel node1 = new BinaryTreeModel("node1"); + BinaryTreeModel node2 = new BinaryTreeModel("node2"); + root.setLeft(node1); + root.setRight(node2); + + BinaryTreeModel node3 = new BinaryTreeModel("node3"); + node1.setLeft(node3); + + BinaryTreeModel node4 = new BinaryTreeModel("node4"); + node3.setLeft(node4); + + BinaryTreeModel node5 = new BinaryTreeModel("node5"); + node4.setLeft(node5); + + BinaryTreeModel node6 = new BinaryTreeModel("node6"); + node5.setLeft(node6); + + BinaryTreeModel node7 = new BinaryTreeModel("node7"); + node6.setLeft(node7); + + BinaryTreeModel node8 = new BinaryTreeModel("node8"); + node7.setLeft(node8); + + return root; + } + + private BinaryTreeModel createRightUnbalancedTree() { + + BinaryTreeModel root = new BinaryTreeModel("right"); + + BinaryTreeModel node1 = new BinaryTreeModel("node1"); + BinaryTreeModel node2 = new BinaryTreeModel("node2"); + root.setLeft(node1); + root.setRight(node2); + + BinaryTreeModel node3 = new BinaryTreeModel("node3"); + node2.setRight(node3); + + BinaryTreeModel node4 = new BinaryTreeModel("node4"); + node3.setRight(node4); + + BinaryTreeModel node5 = new BinaryTreeModel("node5"); + node4.setRight(node5); + + BinaryTreeModel node6 = new BinaryTreeModel("node6"); + node5.setRight(node6); + + BinaryTreeModel node7 = new BinaryTreeModel("node7"); + node6.setRight(node7); + + BinaryTreeModel node8 = new BinaryTreeModel("node8"); + node7.setRight(node8); + + return root; + } + + @Test + public void givenBinaryTreeModelBalanced_whenPrintWithBinaryTreePrinter() { + new BinaryTreePrinter(balanced).print(); + } + + @Test + public void givenBinaryTreeModelLeftUnbalanced_whenPrintWithBinaryTreePrinter() { + new BinaryTreePrinter(leftUnbalanced).print(); + } + + @Test + public void givenBinaryTreeModelRightUnbalanced_whenPrintWithBinaryTreePrinter() { + new BinaryTreePrinter(rightUnbalanced).print(); + } + +} From f863b3261e5d63d53a8da1ec77bdc8a5ca1f13fe Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Wed, 20 Nov 2019 00:33:12 +0100 Subject: [PATCH 2/8] Add source code for BAEL-3408 --- .../baeldung/binarytree/BinaryTreeModel.java | 37 ++++++ .../binarytree/BinaryTreePrinter.java | 62 +++++++++ .../PrintingBinaryTreeUnitTest.java | 124 ++++++++++++++++++ 3 files changed, 223 insertions(+) create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java create mode 100644 core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java create mode 100644 core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java new file mode 100644 index 0000000000..6c62a60d01 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java @@ -0,0 +1,37 @@ +package com.baeldung.binarytree; + +public class BinaryTreeModel { + + private Object value; + private BinaryTreeModel left; + private BinaryTreeModel right; + + public BinaryTreeModel(Object value) { + this.value = value; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + public BinaryTreeModel getLeft() { + return left; + } + + public void setLeft(BinaryTreeModel left) { + this.left = left; + } + + public BinaryTreeModel getRight() { + return right; + } + + public void setRight(BinaryTreeModel right) { + this.right = right; + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java new file mode 100644 index 0000000000..d425bd7003 --- /dev/null +++ b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java @@ -0,0 +1,62 @@ +package com.baeldung.binarytree; + +public class BinaryTreePrinter { + + private BinaryTreeModel tree; + + public BinaryTreePrinter(BinaryTreeModel tree) { + this.tree = tree; + } + + private String traversePreOrder(BinaryTreeModel root) { + + if (root == null) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + sb.append(root.getValue()); + sb.append("\n"); + + String pointerRight = "└──"; + String pointerLeft = (root.getRight() != null) ? "├──" : "└──"; + + traverseNodes(sb, "", pointerLeft, root.getLeft(), root.getRight() != null); + traverseNodes(sb, "", pointerRight, root.getRight(), false); + + return sb.toString(); + } + + private void traverseNodes(StringBuilder sb, String padding, String pointer, BinaryTreeModel node, + boolean hasRightSibling) { + + if (node != null) { + + sb.append(padding); + sb.append(pointer); + sb.append(node.getValue()); + sb.append("\n"); + + StringBuilder paddingBuilder = new StringBuilder(padding); + if (hasRightSibling) { + paddingBuilder.append("│ "); + } else { + paddingBuilder.append(" "); + } + + String paddingForBoth = paddingBuilder.toString(); + String pointerRight = "└──"; + String pointerLeft = (node.getRight() != null) ? "├──" : "└──"; + + traverseNodes(sb, paddingForBoth, pointerLeft, node.getLeft(), node.getRight() != null); + traverseNodes(sb, paddingForBoth, pointerRight, node.getRight(), false); + + } + + } + + public void print() { + System.out.println(traversePreOrder(tree)); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java new file mode 100644 index 0000000000..c9828c2867 --- /dev/null +++ b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java @@ -0,0 +1,124 @@ +package com.baeldung.binarytree; + +import org.junit.Before; +import org.junit.Test; + +public class PrintingBinaryTreeUnitTest { + + private BinaryTreeModel balanced; + private BinaryTreeModel leftUnbalanced; + private BinaryTreeModel rightUnbalanced; + + @Before + public void setup() { + balanced = createBalancedTree(); + leftUnbalanced = createLeftUnbalancedTree(); + rightUnbalanced = createRightUnbalancedTree(); + } + + private BinaryTreeModel createBalancedTree() { + + BinaryTreeModel root = new BinaryTreeModel("root"); + + BinaryTreeModel node1 = new BinaryTreeModel("node1"); + BinaryTreeModel node2 = new BinaryTreeModel("node2"); + root.setLeft(node1); + root.setRight(node2); + + BinaryTreeModel node3 = new BinaryTreeModel("node3"); + BinaryTreeModel node4 = new BinaryTreeModel("node4"); + node1.setLeft(node3); + node1.setRight(node4); + + BinaryTreeModel node5 = new BinaryTreeModel("node5"); + BinaryTreeModel node6 = new BinaryTreeModel("node6"); + node2.setLeft(node5); + node2.setRight(node6); + + BinaryTreeModel node7 = new BinaryTreeModel("node7"); + node3.setLeft(node7); + + BinaryTreeModel node8 = new BinaryTreeModel("node8"); + BinaryTreeModel node9 = new BinaryTreeModel("node9"); + node7.setLeft(node8); + node7.setRight(node9); + + return root; + } + + private BinaryTreeModel createLeftUnbalancedTree() { + + BinaryTreeModel root = new BinaryTreeModel("left"); + + BinaryTreeModel node1 = new BinaryTreeModel("node1"); + BinaryTreeModel node2 = new BinaryTreeModel("node2"); + root.setLeft(node1); + root.setRight(node2); + + BinaryTreeModel node3 = new BinaryTreeModel("node3"); + node1.setLeft(node3); + + BinaryTreeModel node4 = new BinaryTreeModel("node4"); + node3.setLeft(node4); + + BinaryTreeModel node5 = new BinaryTreeModel("node5"); + node4.setLeft(node5); + + BinaryTreeModel node6 = new BinaryTreeModel("node6"); + node5.setLeft(node6); + + BinaryTreeModel node7 = new BinaryTreeModel("node7"); + node6.setLeft(node7); + + BinaryTreeModel node8 = new BinaryTreeModel("node8"); + node7.setLeft(node8); + + return root; + } + + private BinaryTreeModel createRightUnbalancedTree() { + + BinaryTreeModel root = new BinaryTreeModel("right"); + + BinaryTreeModel node1 = new BinaryTreeModel("node1"); + BinaryTreeModel node2 = new BinaryTreeModel("node2"); + root.setLeft(node1); + root.setRight(node2); + + BinaryTreeModel node3 = new BinaryTreeModel("node3"); + node2.setRight(node3); + + BinaryTreeModel node4 = new BinaryTreeModel("node4"); + node3.setRight(node4); + + BinaryTreeModel node5 = new BinaryTreeModel("node5"); + node4.setRight(node5); + + BinaryTreeModel node6 = new BinaryTreeModel("node6"); + node5.setRight(node6); + + BinaryTreeModel node7 = new BinaryTreeModel("node7"); + node6.setRight(node7); + + BinaryTreeModel node8 = new BinaryTreeModel("node8"); + node7.setRight(node8); + + return root; + } + + @Test + public void givenBinaryTreeModelBalanced_whenPrintWithBinaryTreePrinter() { + new BinaryTreePrinter(balanced).print(); + } + + @Test + public void givenBinaryTreeModelLeftUnbalanced_whenPrintWithBinaryTreePrinter() { + new BinaryTreePrinter(leftUnbalanced).print(); + } + + @Test + public void givenBinaryTreeModelRightUnbalanced_whenPrintWithBinaryTreePrinter() { + new BinaryTreePrinter(rightUnbalanced).print(); + } + +} From d7dbdf68f7d81f6c9fd0e5c700f559772db9abec Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Wed, 20 Nov 2019 02:45:42 +0100 Subject: [PATCH 3/8] delete extra files --- .../binarytree/PrintingBinaryTreeTest.java | 124 ------------------ 1 file changed, 124 deletions(-) delete mode 100644 core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java deleted file mode 100644 index e822737c19..0000000000 --- a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.baeldung.binarytree; - -import org.junit.Before; -import org.junit.Test; - -public class PrintingBinaryTreeTest { - - private BinaryTreeModel balanced; - private BinaryTreeModel leftUnbalanced; - private BinaryTreeModel rightUnbalanced; - - @Before - public void setup() { - balanced = createBalancedTree(); - leftUnbalanced = createLeftUnbalancedTree(); - rightUnbalanced = createRightUnbalancedTree(); - } - - private BinaryTreeModel createBalancedTree() { - - BinaryTreeModel root = new BinaryTreeModel("root"); - - BinaryTreeModel node1 = new BinaryTreeModel("node1"); - BinaryTreeModel node2 = new BinaryTreeModel("node2"); - root.setLeft(node1); - root.setRight(node2); - - BinaryTreeModel node3 = new BinaryTreeModel("node3"); - BinaryTreeModel node4 = new BinaryTreeModel("node4"); - node1.setLeft(node3); - node1.setRight(node4); - - BinaryTreeModel node5 = new BinaryTreeModel("node5"); - BinaryTreeModel node6 = new BinaryTreeModel("node6"); - node2.setLeft(node5); - node2.setRight(node6); - - BinaryTreeModel node7 = new BinaryTreeModel("node7"); - node3.setLeft(node7); - - BinaryTreeModel node8 = new BinaryTreeModel("node8"); - BinaryTreeModel node9 = new BinaryTreeModel("node9"); - node7.setLeft(node8); - node7.setRight(node9); - - return root; - } - - private BinaryTreeModel createLeftUnbalancedTree() { - - BinaryTreeModel root = new BinaryTreeModel("left"); - - BinaryTreeModel node1 = new BinaryTreeModel("node1"); - BinaryTreeModel node2 = new BinaryTreeModel("node2"); - root.setLeft(node1); - root.setRight(node2); - - BinaryTreeModel node3 = new BinaryTreeModel("node3"); - node1.setLeft(node3); - - BinaryTreeModel node4 = new BinaryTreeModel("node4"); - node3.setLeft(node4); - - BinaryTreeModel node5 = new BinaryTreeModel("node5"); - node4.setLeft(node5); - - BinaryTreeModel node6 = new BinaryTreeModel("node6"); - node5.setLeft(node6); - - BinaryTreeModel node7 = new BinaryTreeModel("node7"); - node6.setLeft(node7); - - BinaryTreeModel node8 = new BinaryTreeModel("node8"); - node7.setLeft(node8); - - return root; - } - - private BinaryTreeModel createRightUnbalancedTree() { - - BinaryTreeModel root = new BinaryTreeModel("right"); - - BinaryTreeModel node1 = new BinaryTreeModel("node1"); - BinaryTreeModel node2 = new BinaryTreeModel("node2"); - root.setLeft(node1); - root.setRight(node2); - - BinaryTreeModel node3 = new BinaryTreeModel("node3"); - node2.setRight(node3); - - BinaryTreeModel node4 = new BinaryTreeModel("node4"); - node3.setRight(node4); - - BinaryTreeModel node5 = new BinaryTreeModel("node5"); - node4.setRight(node5); - - BinaryTreeModel node6 = new BinaryTreeModel("node6"); - node5.setRight(node6); - - BinaryTreeModel node7 = new BinaryTreeModel("node7"); - node6.setRight(node7); - - BinaryTreeModel node8 = new BinaryTreeModel("node8"); - node7.setRight(node8); - - return root; - } - - @Test - public void givenBinaryTreeModelBalanced_whenPrintWithBinaryTreePrinter() { - new BinaryTreePrinter(balanced).print(); - } - - @Test - public void givenBinaryTreeModelLeftUnbalanced_whenPrintWithBinaryTreePrinter() { - new BinaryTreePrinter(leftUnbalanced).print(); - } - - @Test - public void givenBinaryTreeModelRightUnbalanced_whenPrintWithBinaryTreePrinter() { - new BinaryTreePrinter(rightUnbalanced).print(); - } - -} From 78542d32215cf587f0f5a6ae8b83f04f1b98757b Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Wed, 20 Nov 2019 16:01:30 +0100 Subject: [PATCH 4/8] update unit tests --- .../binarytree/BinaryTreePrinter.java | 5 +- ...a => PrintingBinaryTreeModelUnitTest.java} | 78 ++++++++++++++++--- 2 files changed, 71 insertions(+), 12 deletions(-) rename core-java-modules/core-java/src/test/java/com/baeldung/binarytree/{PrintingBinaryTreeUnitTest.java => PrintingBinaryTreeModelUnitTest.java} (52%) diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java index d425bd7003..861e42fba1 100644 --- a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java +++ b/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java @@ -16,7 +16,6 @@ public class BinaryTreePrinter { StringBuilder sb = new StringBuilder(); sb.append(root.getValue()); - sb.append("\n"); String pointerRight = "└──"; String pointerLeft = (root.getRight() != null) ? "├──" : "└──"; @@ -32,10 +31,10 @@ public class BinaryTreePrinter { if (node != null) { + sb.append("\n"); sb.append(padding); sb.append(pointer); sb.append(node.getValue()); - sb.append("\n"); StringBuilder paddingBuilder = new StringBuilder(padding); if (hasRightSibling) { @@ -56,7 +55,7 @@ public class BinaryTreePrinter { } public void print() { - System.out.println(traversePreOrder(tree)); + System.out.print(traversePreOrder(tree)); } } \ No newline at end of file diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java similarity index 52% rename from core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java rename to core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java index c9828c2867..3cfcdca833 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeUnitTest.java +++ b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java @@ -1,19 +1,36 @@ package com.baeldung.binarytree; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.io.PrintStream; + +import org.junit.After; import org.junit.Before; import org.junit.Test; -public class PrintingBinaryTreeUnitTest { +public class PrintingBinaryTreeModelUnitTest { private BinaryTreeModel balanced; - private BinaryTreeModel leftUnbalanced; - private BinaryTreeModel rightUnbalanced; + private BinaryTreeModel leftSkewed; + private BinaryTreeModel rightSkewed; + + private OutputStream output; @Before public void setup() { balanced = createBalancedTree(); - leftUnbalanced = createLeftUnbalancedTree(); - rightUnbalanced = createRightUnbalancedTree(); + leftSkewed = createLeftUnbalancedTree(); + rightSkewed = createRightUnbalancedTree(); + + output = new ByteArrayOutputStream(); + System.setOut(new PrintStream(output)); + } + + @After + public void tearDown() { + System.setOut(System.out); } private BinaryTreeModel createBalancedTree() { @@ -48,7 +65,7 @@ public class PrintingBinaryTreeUnitTest { private BinaryTreeModel createLeftUnbalancedTree() { - BinaryTreeModel root = new BinaryTreeModel("left"); + BinaryTreeModel root = new BinaryTreeModel("root"); BinaryTreeModel node1 = new BinaryTreeModel("node1"); BinaryTreeModel node2 = new BinaryTreeModel("node2"); @@ -78,7 +95,7 @@ public class PrintingBinaryTreeUnitTest { private BinaryTreeModel createRightUnbalancedTree() { - BinaryTreeModel root = new BinaryTreeModel("right"); + BinaryTreeModel root = new BinaryTreeModel("root"); BinaryTreeModel node1 = new BinaryTreeModel("node1"); BinaryTreeModel node2 = new BinaryTreeModel("node2"); @@ -108,17 +125,60 @@ public class PrintingBinaryTreeUnitTest { @Test public void givenBinaryTreeModelBalanced_whenPrintWithBinaryTreePrinter() { + + StringBuilder expected = new StringBuilder(); + expected.append("root").append("\n"); + expected.append("├──node1").append("\n"); + expected.append("│ ├──node3").append("\n"); + expected.append("│ │ └──node7").append("\n"); + expected.append("│ │ ├──node8").append("\n"); + expected.append("│ │ └──node9").append("\n"); + expected.append("│ └──node4").append("\n"); + expected.append("└──node2").append("\n"); + expected.append(" ├──node5").append("\n"); + expected.append(" └──node6"); + new BinaryTreePrinter(balanced).print(); + + assertEquals(expected.toString(), output.toString()); } @Test public void givenBinaryTreeModelLeftUnbalanced_whenPrintWithBinaryTreePrinter() { - new BinaryTreePrinter(leftUnbalanced).print(); + + StringBuilder expected = new StringBuilder(); + expected.append("root").append("\n"); + expected.append("├──node1").append("\n"); + expected.append("│ └──node3").append("\n"); + expected.append("│ └──node4").append("\n"); + expected.append("│ └──node5").append("\n"); + expected.append("│ └──node6").append("\n"); + expected.append("│ └──node7").append("\n"); + expected.append("│ └──node8").append("\n"); + expected.append("└──node2"); + + new BinaryTreePrinter(leftSkewed).print(); + + assertEquals(expected.toString(), output.toString()); } @Test public void givenBinaryTreeModelRightUnbalanced_whenPrintWithBinaryTreePrinter() { - new BinaryTreePrinter(rightUnbalanced).print(); + + StringBuilder expected = new StringBuilder(); + expected.append("root").append("\n"); + expected.append("├──node1").append("\n"); + expected.append("└──node2").append("\n"); + expected.append(" └──node3").append("\n"); + expected.append(" └──node4").append("\n"); + expected.append(" └──node5").append("\n"); + expected.append(" └──node6").append("\n"); + expected.append(" └──node7").append("\n"); + expected.append(" └──node8"); + + new BinaryTreePrinter(rightSkewed).print(); + + assertEquals(expected.toString(), output.toString()); } } From 8becb37442da76e74da222e293441a98d13eec36 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Wed, 20 Nov 2019 16:07:51 +0100 Subject: [PATCH 5/8] correct test method names as proper to our convention --- .../binarytree/PrintingBinaryTreeModelUnitTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java index 3cfcdca833..de4e3dfa01 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java +++ b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java @@ -124,7 +124,7 @@ public class PrintingBinaryTreeModelUnitTest { } @Test - public void givenBinaryTreeModelBalanced_whenPrintWithBinaryTreePrinter() { + public void givenBinaryTreeModelBalanced_whenPrintWithBinaryTreePrinter_thenProduceCorrectOutput() { StringBuilder expected = new StringBuilder(); expected.append("root").append("\n"); @@ -144,7 +144,7 @@ public class PrintingBinaryTreeModelUnitTest { } @Test - public void givenBinaryTreeModelLeftUnbalanced_whenPrintWithBinaryTreePrinter() { + public void givenBinaryTreeModelLeftUnbalanced_whenPrintWithBinaryTreePrinter_thenProduceCorrectOutput() { StringBuilder expected = new StringBuilder(); expected.append("root").append("\n"); @@ -163,7 +163,7 @@ public class PrintingBinaryTreeModelUnitTest { } @Test - public void givenBinaryTreeModelRightUnbalanced_whenPrintWithBinaryTreePrinter() { + public void givenBinaryTreeModelRightUnbalanced_whenPrintWithBinaryTreePrinter_thenProduceCorrectOutput() { StringBuilder expected = new StringBuilder(); expected.append("root").append("\n"); From 49696746ceb0ed97219cf03a140ea48f3d4e1612 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 30 Nov 2019 08:33:51 +0100 Subject: [PATCH 6/8] condense a little bit the code of test data --- .../PrintingBinaryTreeModelUnitTest.java | 39 +++++++------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java index de4e3dfa01..8ea0bdd5ba 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java +++ b/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java @@ -32,34 +32,29 @@ public class PrintingBinaryTreeModelUnitTest { public void tearDown() { System.setOut(System.out); } - + private BinaryTreeModel createBalancedTree() { - + BinaryTreeModel root = new BinaryTreeModel("root"); - + BinaryTreeModel node1 = new BinaryTreeModel("node1"); BinaryTreeModel node2 = new BinaryTreeModel("node2"); root.setLeft(node1); root.setRight(node2); - + BinaryTreeModel node3 = new BinaryTreeModel("node3"); BinaryTreeModel node4 = new BinaryTreeModel("node4"); node1.setLeft(node3); node1.setRight(node4); - - BinaryTreeModel node5 = new BinaryTreeModel("node5"); - BinaryTreeModel node6 = new BinaryTreeModel("node6"); - node2.setLeft(node5); - node2.setRight(node6); - + + node2.setLeft(new BinaryTreeModel("node5")); + node2.setRight(new BinaryTreeModel("node6")); + BinaryTreeModel node7 = new BinaryTreeModel("node7"); node3.setLeft(node7); - - BinaryTreeModel node8 = new BinaryTreeModel("node8"); - BinaryTreeModel node9 = new BinaryTreeModel("node9"); - node7.setLeft(node8); - node7.setRight(node9); - + node7.setLeft(new BinaryTreeModel("node8")); + node7.setRight(new BinaryTreeModel("node9")); + return root; } @@ -68,9 +63,8 @@ public class PrintingBinaryTreeModelUnitTest { BinaryTreeModel root = new BinaryTreeModel("root"); BinaryTreeModel node1 = new BinaryTreeModel("node1"); - BinaryTreeModel node2 = new BinaryTreeModel("node2"); root.setLeft(node1); - root.setRight(node2); + root.setRight(new BinaryTreeModel("node2")); BinaryTreeModel node3 = new BinaryTreeModel("node3"); node1.setLeft(node3); @@ -87,8 +81,7 @@ public class PrintingBinaryTreeModelUnitTest { BinaryTreeModel node7 = new BinaryTreeModel("node7"); node6.setLeft(node7); - BinaryTreeModel node8 = new BinaryTreeModel("node8"); - node7.setLeft(node8); + node7.setLeft(new BinaryTreeModel("node8")); return root; } @@ -97,9 +90,8 @@ public class PrintingBinaryTreeModelUnitTest { BinaryTreeModel root = new BinaryTreeModel("root"); - BinaryTreeModel node1 = new BinaryTreeModel("node1"); BinaryTreeModel node2 = new BinaryTreeModel("node2"); - root.setLeft(node1); + root.setLeft(new BinaryTreeModel("node1")); root.setRight(node2); BinaryTreeModel node3 = new BinaryTreeModel("node3"); @@ -117,8 +109,7 @@ public class PrintingBinaryTreeModelUnitTest { BinaryTreeModel node7 = new BinaryTreeModel("node7"); node6.setRight(node7); - BinaryTreeModel node8 = new BinaryTreeModel("node8"); - node7.setRight(node8); + node7.setRight(new BinaryTreeModel("node8")); return root; } From 669587056841b9d786b06255db01d3f6d296c98a Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 7 Dec 2019 02:08:35 +0100 Subject: [PATCH 7/8] change package name and update print method --- .../BinaryTreeModel.java | 2 +- .../BinaryTreePrinter.java | 8 +++++--- .../PrintingBinaryTreeModelUnitTest.java | 11 +++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) rename core-java-modules/core-java/src/main/java/com/baeldung/{binarytree => printbinarytree}/BinaryTreeModel.java (94%) rename core-java-modules/core-java/src/main/java/com/baeldung/{binarytree => printbinarytree}/BinaryTreePrinter.java (91%) rename core-java-modules/core-java/src/test/java/com/baeldung/{binarytree => printbinarytree}/PrintingBinaryTreeModelUnitTest.java (94%) diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java b/core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java similarity index 94% rename from core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java rename to core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java index 6c62a60d01..94796bf997 100644 --- a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreeModel.java +++ b/core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java @@ -1,4 +1,4 @@ -package com.baeldung.binarytree; +package com.baeldung.printbinarytree; public class BinaryTreeModel { diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java b/core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java similarity index 91% rename from core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java rename to core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java index 861e42fba1..0ec844d7b6 100644 --- a/core-java-modules/core-java/src/main/java/com/baeldung/binarytree/BinaryTreePrinter.java +++ b/core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java @@ -1,4 +1,6 @@ -package com.baeldung.binarytree; +package com.baeldung.printbinarytree; + +import java.io.PrintStream; public class BinaryTreePrinter { @@ -54,8 +56,8 @@ public class BinaryTreePrinter { } - public void print() { - System.out.print(traversePreOrder(tree)); + public void print(PrintStream os) { + os.print(traversePreOrder(tree)); } } \ No newline at end of file diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java b/core-java-modules/core-java/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java similarity index 94% rename from core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java rename to core-java-modules/core-java/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java index 8ea0bdd5ba..5c250730f9 100644 --- a/core-java-modules/core-java/src/test/java/com/baeldung/binarytree/PrintingBinaryTreeModelUnitTest.java +++ b/core-java-modules/core-java/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.binarytree; +package com.baeldung.printbinarytree; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -10,6 +10,9 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import com.baeldung.printbinarytree.BinaryTreeModel; +import com.baeldung.printbinarytree.BinaryTreePrinter; + public class PrintingBinaryTreeModelUnitTest { private BinaryTreeModel balanced; @@ -129,7 +132,7 @@ public class PrintingBinaryTreeModelUnitTest { expected.append(" ├──node5").append("\n"); expected.append(" └──node6"); - new BinaryTreePrinter(balanced).print(); + new BinaryTreePrinter(balanced).print(System.out); assertEquals(expected.toString(), output.toString()); } @@ -148,7 +151,7 @@ public class PrintingBinaryTreeModelUnitTest { expected.append("│ └──node8").append("\n"); expected.append("└──node2"); - new BinaryTreePrinter(leftSkewed).print(); + new BinaryTreePrinter(leftSkewed).print(System.out); assertEquals(expected.toString(), output.toString()); } @@ -167,7 +170,7 @@ public class PrintingBinaryTreeModelUnitTest { expected.append(" └──node7").append("\n"); expected.append(" └──node8"); - new BinaryTreePrinter(rightSkewed).print(); + new BinaryTreePrinter(rightSkewed).print(System.out); assertEquals(expected.toString(), output.toString()); } From aeb268136694ef692d62802d0bcd55554a5d0dc2 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sun, 8 Dec 2019 15:39:28 +0100 Subject: [PATCH 8/8] carry the code from core-java to data-structures module --- .../main/java/com/baeldung/printbinarytree/BinaryTreeModel.java | 0 .../main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java | 0 .../baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {core-java-modules/core-java => data-structures}/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java (100%) rename {core-java-modules/core-java => data-structures}/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java (100%) rename {core-java-modules/core-java => data-structures}/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java (100%) diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java b/data-structures/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java rename to data-structures/src/main/java/com/baeldung/printbinarytree/BinaryTreeModel.java diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java b/data-structures/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java similarity index 100% rename from core-java-modules/core-java/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java rename to data-structures/src/main/java/com/baeldung/printbinarytree/BinaryTreePrinter.java diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java b/data-structures/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java similarity index 100% rename from core-java-modules/core-java/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java rename to data-structures/src/test/java/com/baeldung/printbinarytree/PrintingBinaryTreeModelUnitTest.java