From 3e0cfa56840b02a93fc8fa537cc1d393528783e1 Mon Sep 17 00:00:00 2001 From: Mitchell Irvin Date: Sat, 4 Aug 2018 21:59:53 -0400 Subject: [PATCH 1/4] #778 Implemented BSTIterator. Included comprehensive unit and integration tests. Refactored file structure to be friendly to future contributors with iterators of more data structures. Added JUnitPlatform to enable running test suite across all iterator implementations. Added README to /binarysearchtree to document what it does and how it works. --- iterator/etc/bst.png | Bin 0 -> 101622 bytes iterator/etc/iterator.ucls | 10 +- iterator/pom.xml | 6 ++ .../binarysearchtree/BstIterator.java | 78 ++++++++++++++ .../iterator/binarysearchtree/README.md | 86 +++++++++++++++ .../iterator/binarysearchtree/TreeNode.java | 66 ++++++++++++ .../iterator/interfaces/Iterator.java | 30 ++++++ .../com/iluwatar/iterator/{ => list}/App.java | 5 +- .../iluwatar/iterator/{ => list}/Item.java | 2 +- .../iterator/{ => list}/ItemIterator.java | 2 +- .../iterator/{ => list}/ItemType.java | 2 +- .../iterator/{ => list}/TreasureChest.java | 2 +- .../{ => list}/TreasureChestItemIterator.java | 2 +- .../java/com/iluwatar/iterator/AppTest.java | 48 ++++----- .../binarysearchtree/BstIteratorTest.java | 98 ++++++++++++++++++ .../binarysearchtree/TreeNodeTest.java | 55 ++++++++++ .../{ => list}/TreasureChestTest.java | 6 +- 17 files changed, 458 insertions(+), 40 deletions(-) create mode 100644 iterator/etc/bst.png create mode 100644 iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java create mode 100644 iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md create mode 100644 iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java create mode 100644 iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java rename iterator/src/main/java/com/iluwatar/iterator/{ => list}/App.java (93%) rename iterator/src/main/java/com/iluwatar/iterator/{ => list}/Item.java (97%) rename iterator/src/main/java/com/iluwatar/iterator/{ => list}/ItemIterator.java (97%) rename iterator/src/main/java/com/iluwatar/iterator/{ => list}/ItemType.java (97%) rename iterator/src/main/java/com/iluwatar/iterator/{ => list}/TreasureChest.java (98%) rename iterator/src/main/java/com/iluwatar/iterator/{ => list}/TreasureChestItemIterator.java (98%) create mode 100644 iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java create mode 100644 iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java rename iterator/src/test/java/com/iluwatar/iterator/{ => list}/TreasureChestTest.java (95%) diff --git a/iterator/etc/bst.png b/iterator/etc/bst.png new file mode 100644 index 0000000000000000000000000000000000000000..52ce7013e14f5d3f1fc81404e1dbdd7ef0f4a7a3 GIT binary patch literal 101622 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 literal 0 HcmV?d00001 diff --git a/iterator/etc/iterator.ucls b/iterator/etc/iterator.ucls index 440f9a28bb00..d36dad95d48b 100644 --- a/iterator/etc/iterator.ucls +++ b/iterator/etc/iterator.ucls @@ -1,7 +1,7 @@ - - - - - diff --git a/iterator/pom.xml b/iterator/pom.xml index 6581b8224003..81a785dd1332 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -48,5 +48,11 @@ junit-jupiter-params test + + org.junit.platform + junit-platform-runner + 1.2.0 + test + diff --git a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java new file mode 100644 index 000000000000..b614823898ec --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java @@ -0,0 +1,78 @@ +/** + * The MIT License + * Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.iterator.binarysearchtree; + +import com.iluwatar.iterator.interfaces.Iterator; +import java.util.ArrayDeque; + +/** + * This BstIterator iterates IN order. For example, given a BST with Integer values, + * expect to retrieve TreeNodes according to the Integer's natural ordering (1, 2, 3...) + * @param This Iterator has been implemented with generic typing to allow traversal of TreeNodes of various types + */ +public class BstIterator implements Iterator { + + private ArrayDeque> pathStack; + + public BstIterator(TreeNode root) { + pathStack = new ArrayDeque<>(); + pushPathToNextSmallest(root); + } + + /** + * This BstIterator manages to use O(h) extra space, where h is the height of the tree + * It achieves this by maintaining a stack of the nodes to handle (pushing all left nodes first), + * before handling self or right node + * @param node TreeNode that acts as root of the subtree we're interested in. + */ + private void pushPathToNextSmallest(TreeNode node) { + while (node != null) { + pathStack.push(node); + node = node.getLeft(); + } + } + + /** + * @return true if this iterator has a "next" element + */ + @Override + public boolean hasNext() { + return !pathStack.isEmpty(); + } + + /** + * + * @return TreeNode next. The next element according to our in-order traversal of the given BST + * @throws IllegalStateException if this iterator does not have a next element + */ + @Override + public TreeNode next() throws IllegalStateException { + if (pathStack.isEmpty()) { + throw new IllegalStateException(); + } + TreeNode next = pathStack.pop(); + pushPathToNextSmallest(next.getRight()); + return next; + } + +} diff --git a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md new file mode 100644 index 000000000000..766c4e1c5c56 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md @@ -0,0 +1,86 @@ +# BSTIterator +An implementation of the Iterator design pattern, for the Binary Search Tree +data structure. A great explanation of BSTs can be found in this [video tutorial](https://www.youtube.com/watch?v=i_Q0v_Ct5lY). + +### What it Does +This iterator assumes that the given binary search tree inserts nodes of smaller +value to the left, and nodes of larger value to the right of current node. Accordingly, +this iterator will return nodes according to "In Order" binary tree traversal. +This means that given a binary search tree like the following, the iterator would +return values in order: 1, 3, 4, 6, 7, 8, 10, 13, 14. + +![BST](../../../../../../../etc/bst.png "Binary Search Tree") + +### How It's Done +**The trivial solution** to a binary search tree iterator would be to construct a List (or similar +linear data structure) when you construct the BSTIterator. This would require traversing the entire +BST, adding each node value to your list as you go. The downside to the trivial solution is twofold. +You're front loading the work by requiring the BSTIterator's constructor to traverse the entire tree, +and you're taking up more memory by maintaining (worst case) every node in the tree in a separate +data structure. In Big O terms, here are the costs, where n is the number of nodes in the tree: +* Constructor Run Time: O(n) +* `next()` Run Time: O(1) +* `hasNext()` Run Time: O(1) +* Extra Space: O(n) + +**A better solution** is to maintain _only_ the path to the next smallest node. For instance, given +the BST above, when you first create your BSTIterator, instead of traversing the entire tree, you +would navigate to the next smallest node (in this case, 1), pushing nodes onto a stack along the way. +Your BSTIterator Constructor would look like: +``` +private ArrayDeque pathStack; + +public BSTIterator(TreeNode root) { + pathStack = new ArrayDeque<>(); + pushPathToNextSmallest(root); +} + +private void pushPathToNextSmallest(TreeNode node) { + while (node != null) { + pathStack.push(node); + node = node.getLeft(); + } +} +``` + +After the constructor is called our BST, your `pathStack` would look like this: + +1\ +3\ +8 + +This way, you're certain of what the next smallest node is because it lives on top of your path +stack. In order to maintain the integrity of this path stack, when you call `next()` and pop a +node off the stack, you must check to see if it has a right child. If it does, then you must follow the right +child's path to the next smallest node (pushing onto your path stack as you go). Given our above example, +calling `next()` on our BSTIterator twice would return node "3". Node "3" has a right child, indicating +a path to a node smaller than 3's parent. In this case, you would push node "6" onto the stack, +and node "4" onto the stack. `next()` would look like this: + +``` +public TreeNode next() throws IllegalStateException { + // If the user calls next() and hasNext() is false + if (pathStack.isEmpty()) { + throw new IllegalStateException(); + } + TreeNode next = pathStack.pop(); + // follow right child to next smallest node + pushPathToNextSmallest(next.getRight()); + return next; +} +``` + +**Key Concept:** The path to the smallest node of a given subtree is navigating straight to the +leftmost node of that subtree. + +In Big O terms, here are the costs for our improved solution, where h is the height of the tree: +* Constructor Run Time: O(h) +* `next()` Amortized Run Time: O(1) +* `hasNext()` Run Time: O(1) +* Extra Space: O(h) + +As you can see, this solution more evenly distributes the work. It yields the same amortized +runtime for `next()`, reduces the run time of the constructor, and uses less extra space. + + + \ No newline at end of file diff --git a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java new file mode 100644 index 000000000000..ceffa6cf5376 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java @@ -0,0 +1,66 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator.binarysearchtree; + +/** + * This TreeNode class allows for a generically typed value. + * @param generically typed to accept various data types for the val property + */ +public class TreeNode { + + private T val; + private TreeNode left; + private TreeNode right; + + /** + * Creates a TreeNode with a given value, and null children + * @param val The value of the given node + */ + public TreeNode(T val) { + this.val = val; + this.left = null; + this.right = null; + } + + T getVal() { + return val; + } + + TreeNode getLeft() { + return left; + } + + void setLeft(TreeNode left) { + this.left = left; + } + + TreeNode getRight() { + return right; + } + + void setRight(TreeNode right) { + this.right = right; + } + + @Override + public String toString() { + return val.toString(); + } + +} diff --git a/iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java b/iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java new file mode 100644 index 000000000000..a71c2440e3e0 --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java @@ -0,0 +1,30 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator.interfaces; + +/** + * Iterator interface to be implemented by iterators over various data structures + * @param generically typed for various objects + */ +public interface Iterator { + + boolean hasNext(); + + T next(); +} diff --git a/iterator/src/main/java/com/iluwatar/iterator/App.java b/iterator/src/main/java/com/iluwatar/iterator/list/App.java similarity index 93% rename from iterator/src/main/java/com/iluwatar/iterator/App.java rename to iterator/src/main/java/com/iluwatar/iterator/list/App.java index d283347cba23..9796b4f6db56 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/App.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/App.java @@ -20,8 +20,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; +import com.iluwatar.iterator.interfaces.Iterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,7 +31,7 @@ * The Iterator pattern is a design pattern in which an iterator is used to traverse a container and * access the container's elements. The Iterator pattern decouples algorithms from containers. *

- * In this example the Iterator ({@link ItemIterator}) adds abstraction layer on top of a collection + * In this example the Iterator ({@link Iterator}) adds abstraction layer on top of a collection * ({@link TreasureChest}). This way the collection can change its internal implementation without * affecting its clients. * diff --git a/iterator/src/main/java/com/iluwatar/iterator/Item.java b/iterator/src/main/java/com/iluwatar/iterator/list/Item.java similarity index 97% rename from iterator/src/main/java/com/iluwatar/iterator/Item.java rename to iterator/src/main/java/com/iluwatar/iterator/list/Item.java index 47bc11354d43..7f0f92d99ce7 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/Item.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/Item.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; /** * diff --git a/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java similarity index 97% rename from iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java rename to iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java index 0eab2f075334..d5024daf571a 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; /** * diff --git a/iterator/src/main/java/com/iluwatar/iterator/ItemType.java b/iterator/src/main/java/com/iluwatar/iterator/list/ItemType.java similarity index 97% rename from iterator/src/main/java/com/iluwatar/iterator/ItemType.java rename to iterator/src/main/java/com/iluwatar/iterator/list/ItemType.java index 4cf36926efee..e360626814f6 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/ItemType.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/ItemType.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; /** * diff --git a/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java similarity index 98% rename from iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java rename to iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java index 4b9959269fa3..8428b2308939 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; import java.util.ArrayList; import java.util.List; diff --git a/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java similarity index 98% rename from iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java rename to iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java index 9d841259ff26..80f0198804d4 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java @@ -20,7 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; import java.util.List; diff --git a/iterator/src/test/java/com/iluwatar/iterator/AppTest.java b/iterator/src/test/java/com/iluwatar/iterator/AppTest.java index f448a378e49c..a879df31edb9 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/AppTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/AppTest.java @@ -1,39 +1,33 @@ /** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.iluwatar.iterator; -import org.junit.jupiter.api.Test; +import org.junit.platform.runner.JUnitPlatform; +import org.junit.platform.suite.api.SelectPackages; +import org.junit.platform.suite.api.SuiteDisplayName; +import org.junit.runner.RunWith; /** - * - * Application test - * + * Runs a test suite containing all tests within the com.iluwatar.iterator package */ +@RunWith(JUnitPlatform.class) +@SuiteDisplayName("Iterator Test Suite") +@SelectPackages("com.iluwatar.iterator") public class AppTest { - - @Test - public void test() { - String[] args = {}; - App.main(args); - } -} +} \ No newline at end of file diff --git a/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java b/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java new file mode 100644 index 000000000000..09645edffc9d --- /dev/null +++ b/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java @@ -0,0 +1,98 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator.binarysearchtree; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.iluwatar.iterator.AppTest; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; + +@TestInstance(Lifecycle.PER_CLASS) +class BstIteratorTest extends AppTest { + + private TreeNode nonEmptyRoot; + private TreeNode emptyRoot; + + @BeforeAll + void createTrees() { + nonEmptyRoot = new TreeNode(Integer.valueOf(5)); + nonEmptyRoot.setLeft(new TreeNode(3)); + nonEmptyRoot.setRight(new TreeNode(7)); + nonEmptyRoot.getLeft().setLeft(new TreeNode(1)); + nonEmptyRoot.getLeft().setRight(new TreeNode(4)); + nonEmptyRoot.getRight().setLeft(new TreeNode(6)); + + emptyRoot = null; + } + + @Test + void nextWithEmptyTree() { + BstIterator iter = new BstIterator(emptyRoot); + assertThrows(IllegalStateException.class, iter::next, + "next() should throw an IllegalStateException if hasNext() is false."); + } + + @Test + void nextWithPopulatedTree() { + BstIterator iter = new BstIterator(nonEmptyRoot); + assertEquals(iter.next().getVal(), 1, "First Node is 1."); + assertEquals(iter.next().getVal(), 3, "Second Node is 3."); + assertEquals(iter.next().getVal(), 4, "Third Node is 4."); + assertEquals(iter.next().getVal(), 5, "Fourth Node is 5."); + assertEquals(iter.next().getVal(), 6, "Fifth Node is 6."); + assertEquals(iter.next().getVal(), 7, "Sixth Node is 7."); + } + + @Test + void hasNextWithEmptyTree() { + BstIterator iter = new BstIterator(emptyRoot); + assertFalse(iter.hasNext(), "hasNext() should return false for empty tree."); + } + + @Test + void hasNextWithPopulatedTree() { + BstIterator iter = new BstIterator(nonEmptyRoot); + assertTrue(iter.hasNext(), "hasNext() should return true for populated tree."); + } + + @Test + void nextAndHasNextAcrossEntirePopulatedTree() { + BstIterator iter = new BstIterator(nonEmptyRoot); + assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); + assertEquals(iter.next().getVal(), 1, "First Node is 1."); + assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); + assertEquals(iter.next().getVal(), 3, "Second Node is 3."); + assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); + assertEquals(iter.next().getVal(), 4, "Third Node is 4."); + assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); + assertEquals(iter.next().getVal(), 5, "Fourth Node is 5."); + assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); + assertEquals(iter.next().getVal(), 6, "Fifth Node is 6."); + assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); + assertEquals(iter.next().getVal(), 7, "Sixth Node is 7."); + assertFalse(iter.hasNext(), "Iterator hasNext() should be false, end of tree."); + } + +} diff --git a/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java b/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java new file mode 100644 index 000000000000..8dd2e694e4ca --- /dev/null +++ b/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java @@ -0,0 +1,55 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator.binarysearchtree; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.junit.jupiter.api.Test; + +/** + * Comprehensive tests for TreeNode POJO + * @param generically typed for TreeNode + */ +public class TreeNodeTest { + + @Test + void treeNodeGetters() { + TreeNode node = new TreeNode(1); + assertEquals(node.getVal(), 1); + assertNull(node.getLeft(), "Left child should be initialized as null."); + assertNull(node.getRight(), "Right child should be initialized as null."); + } + + @Test + void treeNodeSetters() { + TreeNode node = new TreeNode(3); + node.setLeft(new TreeNode(1)); + assertEquals(node.getLeft().getVal(), 1, "Left node has a value of 1."); + node.setRight(new TreeNode(5)); + assertEquals(node.getRight().getVal(), 5, "Right node has a value of 5"); + } + + @Test + void treeNodeToString() { + TreeNode node = new TreeNode(3); + assertEquals(node.toString(), "3", "node.toString() should return string value."); + } + +} diff --git a/iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java similarity index 95% rename from iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java rename to iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java index 665666aa7c3e..ebfdbe9f1883 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java @@ -20,8 +20,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.iluwatar.iterator; +package com.iluwatar.iterator.list; +import com.iluwatar.iterator.list.Item; +import com.iluwatar.iterator.list.ItemIterator; +import com.iluwatar.iterator.list.ItemType; +import com.iluwatar.iterator.list.TreasureChest; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; From 1c2ddfad54a3c48c02e9b81a43678ba3502a1489 Mon Sep 17 00:00:00 2001 From: Mitchell Irvin Date: Sat, 25 Aug 2018 18:49:43 -0400 Subject: [PATCH 2/4] Refactored App.java to remove duplicate code and elegantly demonstrate each implementation of the Iterator interface. Removed the redundant ItemIterator interface. Added insert() method to TreeNode class to allow for more elegant construction of BSTs. --- iterator/etc/bst.jpg | Bin 0 -> 77452 bytes iterator/etc/bst.png | Bin 101622 -> 0 bytes iterator/pom.xml | 6 - .../main/java/com/iluwatar/iterator/App.java | 94 ++++++++++++ .../iterator/{interfaces => }/Iterator.java | 2 +- .../binarysearchtree/BstIterator.java | 78 ---------- .../iterator/binarysearchtree/TreeNode.java | 66 --------- .../iluwatar/iterator/bst/BstIterator.java | 77 ++++++++++ .../{binarysearchtree => bst}/README.md | 2 +- .../com/iluwatar/iterator/bst/TreeNode.java | 134 ++++++++++++++++++ .../java/com/iluwatar/iterator/list/App.java | 77 ---------- .../iluwatar/iterator/list/ItemIterator.java | 35 ----- .../iluwatar/iterator/list/TreasureChest.java | 34 ++--- .../list/TreasureChestItemIterator.java | 34 ++--- .../java/com/iluwatar/iterator/AppTest.java | 27 ++-- .../binarysearchtree/TreeNodeTest.java | 55 ------- .../BstIteratorTest.java | 69 ++++----- .../iterator/list/TreasureChestTest.java | 48 +++---- 18 files changed, 406 insertions(+), 432 deletions(-) create mode 100644 iterator/etc/bst.jpg delete mode 100644 iterator/etc/bst.png create mode 100644 iterator/src/main/java/com/iluwatar/iterator/App.java rename iterator/src/main/java/com/iluwatar/iterator/{interfaces => }/Iterator.java (96%) delete mode 100644 iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java delete mode 100644 iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java create mode 100644 iterator/src/main/java/com/iluwatar/iterator/bst/BstIterator.java rename iterator/src/main/java/com/iluwatar/iterator/{binarysearchtree => bst}/README.md (98%) create mode 100644 iterator/src/main/java/com/iluwatar/iterator/bst/TreeNode.java delete mode 100644 iterator/src/main/java/com/iluwatar/iterator/list/App.java delete mode 100644 iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java delete mode 100644 iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java rename iterator/src/test/java/com/iluwatar/iterator/{binarysearchtree => bst}/BstIteratorTest.java (58%) diff --git a/iterator/etc/bst.jpg b/iterator/etc/bst.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7ed6af8271ef23c3fd86160a162b6c71e630ff5 GIT binary patch literal 77452 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 diff --git a/iterator/pom.xml b/iterator/pom.xml index 81a785dd1332..6581b8224003 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -48,11 +48,5 @@ junit-jupiter-params test - - org.junit.platform - junit-platform-runner - 1.2.0 - test - diff --git a/iterator/src/main/java/com/iluwatar/iterator/App.java b/iterator/src/main/java/com/iluwatar/iterator/App.java new file mode 100644 index 000000000000..c3c4d0d8c30c --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/App.java @@ -0,0 +1,94 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator; + +import static com.iluwatar.iterator.list.ItemType.ANY; +import static com.iluwatar.iterator.list.ItemType.POTION; +import static com.iluwatar.iterator.list.ItemType.RING; +import static com.iluwatar.iterator.list.ItemType.WEAPON; + +import com.iluwatar.iterator.bst.BstIterator; +import com.iluwatar.iterator.bst.TreeNode; +import com.iluwatar.iterator.list.ItemType; +import com.iluwatar.iterator.list.TreasureChest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The Iterator pattern is a design pattern in which an iterator is used to traverse a container and + * access the container's elements. The Iterator pattern decouples algorithms from containers. + *

+ * In this example the Iterator ({@link Iterator}) adds abstraction layer on top of a collection + * ({@link TreasureChest}). This way the collection can change its internal implementation without + * affecting its clients. + */ +public class App { + + private static final Logger LOGGER = LoggerFactory.getLogger(App.class); + + private static final TreasureChest TREASURE_CHEST = new TreasureChest(); + + private static void demonstrateTreasureChestIteratorForType(ItemType itemType) { + LOGGER.info("------------------------"); + LOGGER.info("Item Iterator for ItemType " + itemType + ": "); + Iterator itemIterator = TREASURE_CHEST.iterator(itemType); + while (itemIterator.hasNext()) { + LOGGER.info(itemIterator.next().toString()); + } + } + + private static void demonstrateBstIterator() { + LOGGER.info("------------------------"); + LOGGER.info("BST Iterator: "); + TreeNode root = buildIntegerBst(); + BstIterator bstIterator = new BstIterator<>(root); + while (bstIterator.hasNext()) { + LOGGER.info("Next node: " + bstIterator.next().getVal()); + } + } + + private static TreeNode buildIntegerBst() { + TreeNode root = new TreeNode<>(8); + + root.insert(3); + root.insert(10); + root.insert(1); + root.insert(6); + root.insert(14); + root.insert(4); + root.insert(7); + root.insert(13); + + return root; + } + + /** + * Program entry point + * + * @param args command line args + */ + public static void main(String[] args) { + demonstrateTreasureChestIteratorForType(RING); + demonstrateTreasureChestIteratorForType(POTION); + demonstrateTreasureChestIteratorForType(WEAPON); + demonstrateTreasureChestIteratorForType(ANY); + + demonstrateBstIterator(); + } +} diff --git a/iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java b/iterator/src/main/java/com/iluwatar/iterator/Iterator.java similarity index 96% rename from iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java rename to iterator/src/main/java/com/iluwatar/iterator/Iterator.java index a71c2440e3e0..b46996968488 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/interfaces/Iterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/Iterator.java @@ -16,7 +16,7 @@ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package com.iluwatar.iterator.interfaces; +package com.iluwatar.iterator; /** * Iterator interface to be implemented by iterators over various data structures diff --git a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java deleted file mode 100644 index b614823898ec..000000000000 --- a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/BstIterator.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.iluwatar.iterator.binarysearchtree; - -import com.iluwatar.iterator.interfaces.Iterator; -import java.util.ArrayDeque; - -/** - * This BstIterator iterates IN order. For example, given a BST with Integer values, - * expect to retrieve TreeNodes according to the Integer's natural ordering (1, 2, 3...) - * @param This Iterator has been implemented with generic typing to allow traversal of TreeNodes of various types - */ -public class BstIterator implements Iterator { - - private ArrayDeque> pathStack; - - public BstIterator(TreeNode root) { - pathStack = new ArrayDeque<>(); - pushPathToNextSmallest(root); - } - - /** - * This BstIterator manages to use O(h) extra space, where h is the height of the tree - * It achieves this by maintaining a stack of the nodes to handle (pushing all left nodes first), - * before handling self or right node - * @param node TreeNode that acts as root of the subtree we're interested in. - */ - private void pushPathToNextSmallest(TreeNode node) { - while (node != null) { - pathStack.push(node); - node = node.getLeft(); - } - } - - /** - * @return true if this iterator has a "next" element - */ - @Override - public boolean hasNext() { - return !pathStack.isEmpty(); - } - - /** - * - * @return TreeNode next. The next element according to our in-order traversal of the given BST - * @throws IllegalStateException if this iterator does not have a next element - */ - @Override - public TreeNode next() throws IllegalStateException { - if (pathStack.isEmpty()) { - throw new IllegalStateException(); - } - TreeNode next = pathStack.pop(); - pushPathToNextSmallest(next.getRight()); - return next; - } - -} diff --git a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java b/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java deleted file mode 100644 index ceffa6cf5376..000000000000 --- a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/TreeNode.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.iterator.binarysearchtree; - -/** - * This TreeNode class allows for a generically typed value. - * @param generically typed to accept various data types for the val property - */ -public class TreeNode { - - private T val; - private TreeNode left; - private TreeNode right; - - /** - * Creates a TreeNode with a given value, and null children - * @param val The value of the given node - */ - public TreeNode(T val) { - this.val = val; - this.left = null; - this.right = null; - } - - T getVal() { - return val; - } - - TreeNode getLeft() { - return left; - } - - void setLeft(TreeNode left) { - this.left = left; - } - - TreeNode getRight() { - return right; - } - - void setRight(TreeNode right) { - this.right = right; - } - - @Override - public String toString() { - return val.toString(); - } - -} diff --git a/iterator/src/main/java/com/iluwatar/iterator/bst/BstIterator.java b/iterator/src/main/java/com/iluwatar/iterator/bst/BstIterator.java new file mode 100644 index 000000000000..81d025df515c --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/bst/BstIterator.java @@ -0,0 +1,77 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator.bst; + +import com.iluwatar.iterator.Iterator; +import java.util.ArrayDeque; +import java.util.NoSuchElementException; + +/** + * An in-order implementation of a BST Iterator. For example, given a BST with Integer values, + * expect to retrieve TreeNodes according to the Integer's natural ordering (1, 2, 3...) + * + * @param This Iterator has been implemented with generic typing to allow for TreeNodes of + * different value types + */ +public class BstIterator> implements Iterator> { + + private ArrayDeque> pathStack; + + public BstIterator(TreeNode root) { + pathStack = new ArrayDeque<>(); + pushPathToNextSmallest(root); + } + + /** + * This BstIterator manages to use O(h) extra space, where h is the height of the tree It achieves + * this by maintaining a stack of the nodes to handle (pushing all left nodes first), before + * handling self or right node + * + * @param node TreeNode that acts as root of the subtree we're interested in. + */ + private void pushPathToNextSmallest(TreeNode node) { + while (node != null) { + pathStack.push(node); + node = node.getLeft(); + } + } + + /** + * @return true if this iterator has a "next" element + */ + @Override + public boolean hasNext() { + return !pathStack.isEmpty(); + } + + /** + * @return TreeNode next. The next element according to our in-order traversal of the given BST + * @throws NoSuchElementException if this iterator does not have a next element + */ + @Override + public TreeNode next() throws NoSuchElementException { + if (pathStack.isEmpty()) { + throw new NoSuchElementException(); + } + TreeNode next = pathStack.pop(); + pushPathToNextSmallest(next.getRight()); + return next; + } + +} diff --git a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md b/iterator/src/main/java/com/iluwatar/iterator/bst/README.md similarity index 98% rename from iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md rename to iterator/src/main/java/com/iluwatar/iterator/bst/README.md index 766c4e1c5c56..02e8eefcb25b 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/binarysearchtree/README.md +++ b/iterator/src/main/java/com/iluwatar/iterator/bst/README.md @@ -9,7 +9,7 @@ this iterator will return nodes according to "In Order" binary tree traversal. This means that given a binary search tree like the following, the iterator would return values in order: 1, 3, 4, 6, 7, 8, 10, 13, 14. -![BST](../../../../../../../etc/bst.png "Binary Search Tree") +![BST](../../../../../../../etc/bst.jpg "Binary Search Tree") ### How It's Done **The trivial solution** to a binary search tree iterator would be to construct a List (or similar diff --git a/iterator/src/main/java/com/iluwatar/iterator/bst/TreeNode.java b/iterator/src/main/java/com/iluwatar/iterator/bst/TreeNode.java new file mode 100644 index 000000000000..a8da7478790c --- /dev/null +++ b/iterator/src/main/java/com/iluwatar/iterator/bst/TreeNode.java @@ -0,0 +1,134 @@ +/** + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.iterator.bst; + +/** + * TreeNode Class, representing one node in a Binary Search Tree. Allows for a generically typed + * value. + * + * @param generically typed to accept various data types for the val property + */ +public class TreeNode> { + + private T val; + private TreeNode left; + private TreeNode right; + + /** + * Creates a TreeNode with a given value, and null children + * + * @param val The value of the given node + */ + public TreeNode(T val) { + this.val = val; + this.left = null; + this.right = null; + } + + public T getVal() { + return val; + } + + public TreeNode getLeft() { + return left; + } + + private void setLeft(TreeNode left) { + this.left = left; + } + + public TreeNode getRight() { + return right; + } + + private void setRight(TreeNode right) { + this.right = right; + } + + /** + * Inserts new TreeNode based on a given value into the subtree represented by self + * + * @param valToInsert The value to insert as a new TreeNode + */ + public void insert(T valToInsert) { + TreeNode parent = getParentNodeOfValueToBeInserted(valToInsert); + parent.insertNewChild(valToInsert); + } + + /** + * Fetch the Parent TreeNode for a given value to insert into the BST. + * + * @param valToInsert Value of the new TreeNode to be inserted + * @return Parent TreeNode of `valToInsert` + */ + private TreeNode getParentNodeOfValueToBeInserted(T valToInsert) { + TreeNode parent = null; + TreeNode curr = this; + + while (curr != null) { + parent = curr; + curr = curr.traverseOneLevelDown(valToInsert); + } + + return parent; + } + + /** + * Returns left or right child of self based on a value that would be inserted; maintaining the + * integrity of the BST. + * + * @param value The value of the TreeNode that would be inserted beneath self + * @return The child TreeNode of self which represents the subtree where `value` would be inserted + */ + private TreeNode traverseOneLevelDown(T value) { + if (this.isGreaterThan(value)) { + return this.left; + } + return this.right; + } + + /** + * Add a new Child TreeNode of given value to self. WARNING: This method is destructive (will + * overwrite existing tree structure, if any), and should be called only by this class's insert() + * method. + * + * @param valToInsert Value of the new TreeNode to be inserted + */ + private void insertNewChild(T valToInsert) { + if (this.isLessThanOrEqualTo(valToInsert)) { + this.setRight(new TreeNode<>(valToInsert)); + } else { + this.setLeft(new TreeNode<>(valToInsert)); + } + } + + private boolean isGreaterThan(T val) { + return this.val.compareTo(val) > 0; + } + + private boolean isLessThanOrEqualTo(T val) { + return this.val.compareTo(val) < 1; + } + + @Override + public String toString() { + return val.toString(); + } + +} diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/App.java b/iterator/src/main/java/com/iluwatar/iterator/list/App.java deleted file mode 100644 index 9796b4f6db56..000000000000 --- a/iterator/src/main/java/com/iluwatar/iterator/list/App.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.iluwatar.iterator.list; - -import com.iluwatar.iterator.interfaces.Iterator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * - * The Iterator pattern is a design pattern in which an iterator is used to traverse a container and - * access the container's elements. The Iterator pattern decouples algorithms from containers. - *

- * In this example the Iterator ({@link Iterator}) adds abstraction layer on top of a collection - * ({@link TreasureChest}). This way the collection can change its internal implementation without - * affecting its clients. - * - */ -public class App { - - private static final Logger LOGGER = LoggerFactory.getLogger(App.class); - - /** - * Program entry point - * - * @param args command line args - */ - public static void main(String[] args) { - TreasureChest chest = new TreasureChest(); - - ItemIterator ringIterator = chest.iterator(ItemType.RING); - while (ringIterator.hasNext()) { - LOGGER.info(ringIterator.next().toString()); - } - - LOGGER.info("----------"); - - ItemIterator potionIterator = chest.iterator(ItemType.POTION); - while (potionIterator.hasNext()) { - LOGGER.info(potionIterator.next().toString()); - } - - LOGGER.info("----------"); - - ItemIterator weaponIterator = chest.iterator(ItemType.WEAPON); - while (weaponIterator.hasNext()) { - LOGGER.info(weaponIterator.next().toString()); - } - - LOGGER.info("----------"); - - ItemIterator it = chest.iterator(ItemType.ANY); - while (it.hasNext()) { - LOGGER.info(it.next().toString()); - } - } -} diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java deleted file mode 100644 index d5024daf571a..000000000000 --- a/iterator/src/main/java/com/iluwatar/iterator/list/ItemIterator.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package com.iluwatar.iterator.list; - -/** - * - * ItemIterator interface. - * - */ -public interface ItemIterator { - - boolean hasNext(); - - Item next(); -} diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java index 8428b2308939..4cd8f371cc74 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java @@ -1,24 +1,20 @@ /** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.iluwatar.iterator.list; @@ -26,9 +22,9 @@ import java.util.List; /** - * + * * TreasureChest, the collection class. - * + * */ public class TreasureChest { @@ -51,7 +47,7 @@ public TreasureChest() { items.add(new Item(ItemType.WEAPON, "Dagger of poison")); } - ItemIterator iterator(ItemType itemType) { + public TreasureChestItemIterator iterator(ItemType itemType) { return new TreasureChestItemIterator(this, itemType); } diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java index 80f0198804d4..fae948821b9f 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java @@ -1,35 +1,32 @@ /** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.iluwatar.iterator.list; +import com.iluwatar.iterator.Iterator; import java.util.List; /** - * + * * TreasureChestItemIterator * */ -public class TreasureChestItemIterator implements ItemIterator { +public class TreasureChestItemIterator implements Iterator { private TreasureChest chest; private int idx; @@ -59,7 +56,6 @@ public Item next() { } private int findNextIdx() { - List items = chest.getItems(); boolean found = false; int tempIdx = idx; diff --git a/iterator/src/test/java/com/iluwatar/iterator/AppTest.java b/iterator/src/test/java/com/iluwatar/iterator/AppTest.java index a879df31edb9..b7892db5bb4c 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/AppTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/AppTest.java @@ -1,33 +1,34 @@ /** * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + package com.iluwatar.iterator; -import org.junit.platform.runner.JUnitPlatform; -import org.junit.platform.suite.api.SelectPackages; -import org.junit.platform.suite.api.SuiteDisplayName; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; /** - * Runs a test suite containing all tests within the com.iluwatar.iterator package + * Application Test */ -@RunWith(JUnitPlatform.class) -@SuiteDisplayName("Iterator Test Suite") -@SelectPackages("com.iluwatar.iterator") -public class AppTest { -} \ No newline at end of file +class AppTest { + + @Test + void testApp() { + String[] args = {}; + App.main(args); + } +} \ No newline at end of file diff --git a/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java b/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java deleted file mode 100644 index 8dd2e694e4ca..000000000000 --- a/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/TreeNodeTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.iterator.binarysearchtree; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -import org.junit.jupiter.api.Test; - -/** - * Comprehensive tests for TreeNode POJO - * @param generically typed for TreeNode - */ -public class TreeNodeTest { - - @Test - void treeNodeGetters() { - TreeNode node = new TreeNode(1); - assertEquals(node.getVal(), 1); - assertNull(node.getLeft(), "Left child should be initialized as null."); - assertNull(node.getRight(), "Right child should be initialized as null."); - } - - @Test - void treeNodeSetters() { - TreeNode node = new TreeNode(3); - node.setLeft(new TreeNode(1)); - assertEquals(node.getLeft().getVal(), 1, "Left node has a value of 1."); - node.setRight(new TreeNode(5)); - assertEquals(node.getRight().getVal(), 5, "Right node has a value of 5"); - } - - @Test - void treeNodeToString() { - TreeNode node = new TreeNode(3); - assertEquals(node.toString(), "3", "node.toString() should return string value."); - } - -} diff --git a/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java b/iterator/src/test/java/com/iluwatar/iterator/bst/BstIteratorTest.java similarity index 58% rename from iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java rename to iterator/src/test/java/com/iluwatar/iterator/bst/BstIteratorTest.java index 09645edffc9d..0e69b341a316 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/binarysearchtree/BstIteratorTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/bst/BstIteratorTest.java @@ -16,82 +16,83 @@ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -package com.iluwatar.iterator.binarysearchtree; +package com.iluwatar.iterator.bst; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.iluwatar.iterator.AppTest; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; +import java.util.NoSuchElementException; + @TestInstance(Lifecycle.PER_CLASS) -class BstIteratorTest extends AppTest { +class BstIteratorTest { - private TreeNode nonEmptyRoot; - private TreeNode emptyRoot; + private TreeNode nonEmptyRoot; + private TreeNode emptyRoot; @BeforeAll void createTrees() { - nonEmptyRoot = new TreeNode(Integer.valueOf(5)); - nonEmptyRoot.setLeft(new TreeNode(3)); - nonEmptyRoot.setRight(new TreeNode(7)); - nonEmptyRoot.getLeft().setLeft(new TreeNode(1)); - nonEmptyRoot.getLeft().setRight(new TreeNode(4)); - nonEmptyRoot.getRight().setLeft(new TreeNode(6)); + nonEmptyRoot = new TreeNode<>(5); + nonEmptyRoot.insert(3); + nonEmptyRoot.insert(7); + nonEmptyRoot.insert(1); + nonEmptyRoot.insert(4); + nonEmptyRoot.insert(6); emptyRoot = null; } @Test - void nextWithEmptyTree() { - BstIterator iter = new BstIterator(emptyRoot); - assertThrows(IllegalStateException.class, iter::next, + void nextForEmptyTree() { + BstIterator iter = new BstIterator<>(emptyRoot); + assertThrows(NoSuchElementException.class, iter::next, "next() should throw an IllegalStateException if hasNext() is false."); } @Test - void nextWithPopulatedTree() { - BstIterator iter = new BstIterator(nonEmptyRoot); - assertEquals(iter.next().getVal(), 1, "First Node is 1."); - assertEquals(iter.next().getVal(), 3, "Second Node is 3."); - assertEquals(iter.next().getVal(), 4, "Third Node is 4."); - assertEquals(iter.next().getVal(), 5, "Fourth Node is 5."); - assertEquals(iter.next().getVal(), 6, "Fifth Node is 6."); - assertEquals(iter.next().getVal(), 7, "Sixth Node is 7."); + void nextOverEntirePopulatedTree() { + BstIterator iter = new BstIterator<>(nonEmptyRoot); + assertEquals(1, iter.next().getVal(), "First Node is 1."); + assertEquals(3, iter.next().getVal(), "Second Node is 3."); + assertEquals(4, iter.next().getVal(), "Third Node is 4."); + assertEquals(5, iter.next().getVal(), "Fourth Node is 5."); + assertEquals(6, iter.next().getVal(), "Fifth Node is 6."); + assertEquals(7, iter.next().getVal(), "Sixth Node is 7."); } @Test - void hasNextWithEmptyTree() { - BstIterator iter = new BstIterator(emptyRoot); + void hasNextForEmptyTree() { + BstIterator iter = new BstIterator<>(emptyRoot); assertFalse(iter.hasNext(), "hasNext() should return false for empty tree."); } @Test - void hasNextWithPopulatedTree() { - BstIterator iter = new BstIterator(nonEmptyRoot); + void hasNextForPopulatedTree() { + BstIterator iter = new BstIterator<>(nonEmptyRoot); assertTrue(iter.hasNext(), "hasNext() should return true for populated tree."); } @Test - void nextAndHasNextAcrossEntirePopulatedTree() { - BstIterator iter = new BstIterator(nonEmptyRoot); + void nextAndHasNextOverEntirePopulatedTree() { + BstIterator iter = new BstIterator<>(nonEmptyRoot); assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); - assertEquals(iter.next().getVal(), 1, "First Node is 1."); + assertEquals(1, iter.next().getVal(), "First Node is 1."); assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); - assertEquals(iter.next().getVal(), 3, "Second Node is 3."); + assertEquals(3, iter.next().getVal(), "Second Node is 3."); assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); - assertEquals(iter.next().getVal(), 4, "Third Node is 4."); + assertEquals(4, iter.next().getVal(), "Third Node is 4."); assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); - assertEquals(iter.next().getVal(), 5, "Fourth Node is 5."); + assertEquals(5, iter.next().getVal(), "Fourth Node is 5."); assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); - assertEquals(iter.next().getVal(), 6, "Fifth Node is 6."); + assertEquals(6, iter.next().getVal(), "Fifth Node is 6."); assertTrue(iter.hasNext(), "Iterator hasNext() should be true."); - assertEquals(iter.next().getVal(), 7, "Sixth Node is 7."); + assertEquals(7, iter.next().getVal(), "Sixth Node is 7."); assertFalse(iter.hasNext(), "Iterator hasNext() should be false, end of tree."); } diff --git a/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java index ebfdbe9f1883..af5ba22a4d9f 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java @@ -1,41 +1,32 @@ /** - * The MIT License - * Copyright (c) 2014-2016 Ilkka Seppälä + * The MIT License Copyright (c) 2014-2016 Ilkka Seppälä * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.iluwatar.iterator.list; -import com.iluwatar.iterator.list.Item; -import com.iluwatar.iterator.list.ItemIterator; -import com.iluwatar.iterator.list.ItemType; -import com.iluwatar.iterator.list.TreasureChest; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; - -import java.util.ArrayList; -import java.util.List; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + /** * Date: 12/14/15 - 2:58 PM * @@ -64,13 +55,14 @@ public static List dataProvider() { } /** - * Test if the expected item can be retrieved from the chest using the {@link ItemIterator} + * Test if the expected item can be retrieved from the chest using the {@link + * TreasureChestItemIterator} */ @ParameterizedTest @MethodSource("dataProvider") public void testIterator(Item expectedItem) { final TreasureChest chest = new TreasureChest(); - final ItemIterator iterator = chest.iterator(expectedItem.getType()); + final TreasureChestItemIterator iterator = chest.iterator(expectedItem.getType()); assertNotNull(iterator); while (iterator.hasNext()) { From e6f84f2f41fdf4102c0008b6967a6598fc8f8523 Mon Sep 17 00:00:00 2001 From: Mitchell Irvin Date: Tue, 28 Aug 2018 07:46:02 -0400 Subject: [PATCH 3/4] modified return type of TreasureChestItemIterator's constructor to be Iterator --- .../main/java/com/iluwatar/iterator/list/TreasureChest.java | 3 ++- .../java/com/iluwatar/iterator/list/TreasureChestTest.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java index 4cd8f371cc74..86df57de6168 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java @@ -18,6 +18,7 @@ */ package com.iluwatar.iterator.list; +import com.iluwatar.iterator.Iterator; import java.util.ArrayList; import java.util.List; @@ -47,7 +48,7 @@ public TreasureChest() { items.add(new Item(ItemType.WEAPON, "Dagger of poison")); } - public TreasureChestItemIterator iterator(ItemType itemType) { + public Iterator iterator(ItemType itemType) { return new TreasureChestItemIterator(this, itemType); } diff --git a/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java index af5ba22a4d9f..886c18dd1657 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java @@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; +import com.iluwatar.iterator.Iterator; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.params.ParameterizedTest; @@ -62,11 +63,11 @@ public static List dataProvider() { @MethodSource("dataProvider") public void testIterator(Item expectedItem) { final TreasureChest chest = new TreasureChest(); - final TreasureChestItemIterator iterator = chest.iterator(expectedItem.getType()); + final Iterator iterator = chest.iterator(expectedItem.getType()); assertNotNull(iterator); while (iterator.hasNext()) { - final Item item = iterator.next(); + final Item item = (Item) iterator.next(); assertNotNull(item); assertEquals(expectedItem.getType(), item.getType()); From 8458e426bcce9671078d3246ffcafe649d07b3cb Mon Sep 17 00:00:00 2001 From: mxi1809 Date: Wed, 29 Aug 2018 07:36:52 -0400 Subject: [PATCH 4/4] correcting raw types for the item Iterator. --- iterator/src/main/java/com/iluwatar/iterator/App.java | 3 ++- .../main/java/com/iluwatar/iterator/list/TreasureChest.java | 6 ++---- .../iluwatar/iterator/list/TreasureChestItemIterator.java | 2 +- .../java/com/iluwatar/iterator/list/TreasureChestTest.java | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/iterator/src/main/java/com/iluwatar/iterator/App.java b/iterator/src/main/java/com/iluwatar/iterator/App.java index c3c4d0d8c30c..35b2592e56a3 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/App.java +++ b/iterator/src/main/java/com/iluwatar/iterator/App.java @@ -25,6 +25,7 @@ import com.iluwatar.iterator.bst.BstIterator; import com.iluwatar.iterator.bst.TreeNode; +import com.iluwatar.iterator.list.Item; import com.iluwatar.iterator.list.ItemType; import com.iluwatar.iterator.list.TreasureChest; import org.slf4j.Logger; @@ -47,7 +48,7 @@ public class App { private static void demonstrateTreasureChestIteratorForType(ItemType itemType) { LOGGER.info("------------------------"); LOGGER.info("Item Iterator for ItemType " + itemType + ": "); - Iterator itemIterator = TREASURE_CHEST.iterator(itemType); + Iterator itemIterator = TREASURE_CHEST.iterator(itemType); while (itemIterator.hasNext()) { LOGGER.info(itemIterator.next().toString()); } diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java index 86df57de6168..47bc7738486f 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChest.java @@ -48,7 +48,7 @@ public TreasureChest() { items.add(new Item(ItemType.WEAPON, "Dagger of poison")); } - public Iterator iterator(ItemType itemType) { + public Iterator iterator(ItemType itemType) { return new TreasureChestItemIterator(this, itemType); } @@ -56,9 +56,7 @@ public Iterator iterator(ItemType itemType) { * Get all items */ public List getItems() { - List list = new ArrayList<>(); - list.addAll(items); - return list; + return new ArrayList<>(items); } } diff --git a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java index fae948821b9f..ab95d6b4d94a 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/list/TreasureChestItemIterator.java @@ -26,7 +26,7 @@ * TreasureChestItemIterator * */ -public class TreasureChestItemIterator implements Iterator { +public class TreasureChestItemIterator implements Iterator { private TreasureChest chest; private int idx; diff --git a/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java index 886c18dd1657..e15f130b7994 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/list/TreasureChestTest.java @@ -63,11 +63,11 @@ public static List dataProvider() { @MethodSource("dataProvider") public void testIterator(Item expectedItem) { final TreasureChest chest = new TreasureChest(); - final Iterator iterator = chest.iterator(expectedItem.getType()); + final Iterator iterator = chest.iterator(expectedItem.getType()); assertNotNull(iterator); while (iterator.hasNext()) { - final Item item = (Item) iterator.next(); + final Item item = iterator.next(); assertNotNull(item); assertEquals(expectedItem.getType(), item.getType());