From cad5b2dd95b3aa57224b3365d9134eaa0713eeb9 Mon Sep 17 00:00:00 2001 From: Adrian Kuta Date: Fri, 3 Sep 2021 13:35:18 +0200 Subject: [PATCH] Iterator class refactor --- treedatastructure/build.gradle | 2 +- .../tree/PreOrderTreeIterator.kt | 42 +++++++++++++++++++ .../adriankuta/datastructure/tree/TreeNode.kt | 2 +- .../datastructure/tree/TreeNodeIterator.kt | 22 ---------- 4 files changed, 44 insertions(+), 24 deletions(-) create mode 100644 treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/PreOrderTreeIterator.kt delete mode 100644 treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNodeIterator.kt diff --git a/treedatastructure/build.gradle b/treedatastructure/build.gradle index a2d1517..8f7ff6c 100644 --- a/treedatastructure/build.gradle +++ b/treedatastructure/build.gradle @@ -13,7 +13,7 @@ android { defaultConfig { minSdkVersion 15 targetSdkVersion 31 - versionName "2.0.2" + versionName "2.0.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles 'consumer-rules.pro' } diff --git a/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/PreOrderTreeIterator.kt b/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/PreOrderTreeIterator.kt new file mode 100644 index 0000000..d9b3deb --- /dev/null +++ b/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/PreOrderTreeIterator.kt @@ -0,0 +1,42 @@ +package com.github.adriankuta.datastructure.tree + +import java.util.* + +/** + * Tree is iterated by using `Pre-order Traversal Algorithm" + * 1. Check if the current node is empty or null. + * 2. Display the data part of the root (or current node). + * 3. Traverse the left subtree by recursively calling the pre-order function. + * 4. Traverse the right subtree by recursively calling the pre-order function. + * ``` + * E.g. + * 1 + * / | \ + * / | \ + * 2 3 4 + * / \ / | \ + * 5 6 7 8 9 + * / / | \ + * 10 11 12 13 + * + * Output: 1 2 5 10 6 11 12 13 3 4 7 8 9 + * ``` + */ +class PreOrderTreeIterator(root: TreeNode) : Iterator> { + + private val stack = Stack>() + + init { + stack.push(root) + } + + override fun hasNext(): Boolean = !stack.empty() + + override fun next(): TreeNode { + val node = stack.pop() + node.children + .asReversed() + .forEach { stack.push(it) } + return node + } +} \ No newline at end of file diff --git a/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNode.kt b/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNode.kt index da49fdb..7a896f8 100644 --- a/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNode.kt +++ b/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNode.kt @@ -137,5 +137,5 @@ open class TreeNode(val value: T) : Iterable>, ChildDeclarationIn * Output: 1 2 5 10 6 11 12 13 3 4 7 8 9 * ``` */ - override fun iterator(): Iterator> = TreeNodeIterator(this) + override fun iterator(): Iterator> = PreOrderTreeIterator(this) } \ No newline at end of file diff --git a/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNodeIterator.kt b/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNodeIterator.kt deleted file mode 100644 index 115c1c2..0000000 --- a/treedatastructure/src/main/java/com/github/adriankuta/datastructure/tree/TreeNodeIterator.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.github.adriankuta.datastructure.tree - -import java.util.* - -class TreeNodeIterator(root: TreeNode) : Iterator> { - - private val stack = Stack>() - - init { - stack.push(root) - } - - override fun hasNext(): Boolean = !stack.empty() - - override fun next(): TreeNode { - val node = stack.pop() - node.children - .asReversed() - .forEach { stack.push(it) } - return node - } -} \ No newline at end of file