mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2025-04-19 23:19:03 +02:00
Iterator class refactor
This commit is contained in:
parent
74a6a65434
commit
cad5b2dd95
@ -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'
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
@ -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)
|
||||||
}
|
}
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user