Iterator class refactor

This commit is contained in:
Adrian Kuta 2021-09-03 13:35:18 +02:00
parent 74a6a65434
commit cad5b2dd95
4 changed files with 44 additions and 24 deletions

View File

@ -13,7 +13,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 31 targetSdkVersion 31
versionName "2.0.2" versionName "2.0.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro' consumerProguardFiles 'consumer-rules.pro'
} }

View File

@ -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<T>(root: TreeNode<T>) : Iterator<TreeNode<T>> {
private val stack = Stack<TreeNode<T>>()
init {
stack.push(root)
}
override fun hasNext(): Boolean = !stack.empty()
override fun next(): TreeNode<T> {
val node = stack.pop()
node.children
.asReversed()
.forEach { stack.push(it) }
return node
}
}

View File

@ -137,5 +137,5 @@ open class TreeNode<T>(val value: T) : Iterable<TreeNode<T>>, ChildDeclarationIn
* Output: 1 2 5 10 6 11 12 13 3 4 7 8 9 * Output: 1 2 5 10 6 11 12 13 3 4 7 8 9
* ``` * ```
*/ */
override fun iterator(): Iterator<TreeNode<T>> = TreeNodeIterator(this) override fun iterator(): Iterator<TreeNode<T>> = PreOrderTreeIterator(this)
} }

View File

@ -1,22 +0,0 @@
package com.github.adriankuta.datastructure.tree
import java.util.*
class TreeNodeIterator<T>(root: TreeNode<T>) : Iterator<TreeNode<T>> {
private val stack = Stack<TreeNode<T>>()
init {
stack.push(root)
}
override fun hasNext(): Boolean = !stack.empty()
override fun next(): TreeNode<T> {
val node = stack.pop()
node.children
.asReversed()
.forEach { stack.push(it) }
return node
}
}