mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2025-06-30 23:08:00 +02:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
3f166aced0 | |||
8dbbd3b2f8 | |||
f8206013c2 | |||
cf3e5e2c6a | |||
5cdf1a9cbc | |||
c30d516bd2 | |||
dc0317daba | |||
9834cbf07c | |||
1b08504ab9 | |||
d49d813ab5 | |||
5dd80035e4 | |||
3e5401bd9d |
86
README.md
86
README.md
@ -1,47 +1,73 @@
|
||||
# Tree (Data Structure)
|
||||
[](https://search.maven.org/artifact/com.github.adriankuta/tree-structure)
|
||||
[](https://github.com/AdrianKuta/Design-Patterns-Kotlin/blob/master/LICENSE)
|
||||
[](https://circleci.com/gh/AdrianKuta/Tree-Data-Structure)
|
||||
[](https://mvnrepository.com/artifact/com.github.adriankuta/tree-structure)
|
||||
[](https://github.com/AdrianKuta/Design-Patterns-Kotlin/blob/master/LICENSE)
|
||||
[](https://circleci.com/gh/AdrianKuta/Tree-Data-Structure)
|
||||
|
||||
Simple implementation to store object in tree structure. Method `toString()` is overrided to provide nice tree view in logs.
|
||||
|
||||
## Usage
|
||||
|
||||
**Kotlin**
|
||||
```kotlin
|
||||
val root = TreeNode<String>("Root")
|
||||
val beveragesNode = TreeNode<String>("Beverages")
|
||||
val curdNode = TreeNode<String>("Curd")
|
||||
root.addChild(beveragesNode)
|
||||
root.addChild(curdNode)
|
||||
val root = TreeNode("World")
|
||||
val northA = TreeNode("North America")
|
||||
val europe = TreeNode("Europe")
|
||||
root.addChild(northA)
|
||||
root.addChild(europe)
|
||||
|
||||
val teaNode = TreeNode<String>("tea")
|
||||
val coffeeNode = TreeNode<String>("coffee")
|
||||
val milkShakeNode = TreeNode<String>("Milk Shake")
|
||||
beveragesNode.addChild(teaNode)
|
||||
beveragesNode.addChild(coffeeNode)
|
||||
beveragesNode.addChild(milkShakeNode)
|
||||
|
||||
val gingerTeaNode = TreeNode<String>("ginger tea")
|
||||
val normalTeaNode = TreeNode<String>("normal tea")
|
||||
teaNode.addChild(gingerTeaNode)
|
||||
teaNode.addChild(normalTeaNode)
|
||||
|
||||
val yogurtNode = TreeNode<String>("yogurt")
|
||||
val lassiNode = TreeNode<String>("lassi")
|
||||
curdNode.addChild(yogurtNode)
|
||||
curdNode.addChild(lassiNode)
|
||||
val usa = TreeNode("USA")
|
||||
northA.addChild(usa)
|
||||
|
||||
val poland = TreeNode("Poland")
|
||||
val france = TreeNode("France")
|
||||
europe.addChild(poland)
|
||||
europe.addChild(france)
|
||||
println(root)
|
||||
System.out.println("Remove: ${curdNode.value}")
|
||||
root.removeChild(curdNode)
|
||||
System.out.println("Remove: ${gingerTeaNode.value}")
|
||||
root.removeChild(gingerTeaNode)
|
||||
println(root)
|
||||
```
|
||||
|
||||
**Pretty Kotlin**
|
||||
|
||||
```kotlin
|
||||
val root =
|
||||
tree("World") {
|
||||
child("North America") {
|
||||
child("USA")
|
||||
}
|
||||
child("Europe") {
|
||||
child("Poland")
|
||||
child("Germany")
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Java**
|
||||
```java
|
||||
TreeNode<String> root = new TreeNode<>("World");
|
||||
TreeNode<String> northA = new TreeNode<>("North America");
|
||||
TreeNode<String> europe = new TreeNode<>("Europe");
|
||||
root.addChild(northA);
|
||||
root.addChild(europe);
|
||||
|
||||
TreeNode<String> usa = new TreeNode<>("USA");
|
||||
northA.addChild(usa);
|
||||
|
||||
TreeNode<String> poland = new TreeNode<>("Poland");
|
||||
TreeNode<String> france = new TreeNode<>("France");
|
||||
europe.addChild(poland);
|
||||
europe.addChild(france);
|
||||
System.out.println(root);
|
||||
```
|
||||
|
||||
*Output:*
|
||||
|
||||
<img src="https://github.com/AdrianKuta/Tree-Collection/blob/master/images/console_output.png" width=400>
|
||||
```
|
||||
World
|
||||
├── North America
|
||||
│ └── USA
|
||||
└── Europe
|
||||
├── Poland
|
||||
└── France
|
||||
```
|
||||
|
||||
|
||||
## Download
|
||||
|
3
_config.yml
Normal file
3
_config.yml
Normal file
@ -0,0 +1,3 @@
|
||||
theme: jekyll-theme-minimal
|
||||
title: Tree Data Structure
|
||||
logo: images/console_output.png
|
@ -15,7 +15,7 @@ android {
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 29
|
||||
versionCode 1
|
||||
versionName "1.1.0"
|
||||
versionName "1.2.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
consumerProguardFiles 'consumer-rules.pro'
|
||||
|
@ -5,17 +5,17 @@ interface ChildDeclarationInterface<T> {
|
||||
/**
|
||||
* This method is used to easily create child in node.
|
||||
* ```
|
||||
* val root = treeNode("World") {
|
||||
* treeNode("North America") {
|
||||
* treeNode("USA")
|
||||
* val root = tree("World") {
|
||||
* child("North America") {
|
||||
* child("USA")
|
||||
* }
|
||||
* treeNode("Europe") {
|
||||
* treeNode("Poland")
|
||||
* treeNode("Germany")
|
||||
* child("Europe") {
|
||||
* child("Poland")
|
||||
* child("Germany")
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
@JvmSynthetic
|
||||
fun treeNode(value: T, childDeclaration: ChildDeclaration<T>? = null)
|
||||
fun child(value: T, childDeclaration: ChildDeclaration<T>? = null)
|
||||
}
|
@ -27,7 +27,7 @@ open class TreeNode<T>(val value: T) : Iterable<TreeNode<T>>, ChildDeclarationIn
|
||||
}
|
||||
|
||||
@JvmSynthetic
|
||||
override fun treeNode(value: T, childDeclaration: ChildDeclaration<T>?) {
|
||||
override fun child(child: T, childDeclaration: ChildDeclaration<T>?) {
|
||||
val newChild = TreeNode(value)
|
||||
if(childDeclaration != null)
|
||||
newChild.childDeclaration()
|
||||
|
@ -5,13 +5,14 @@ typealias ChildDeclaration<T> = ChildDeclarationInterface<T>.() -> Unit
|
||||
/**
|
||||
* This method can be used to initialize new tree.
|
||||
* ```
|
||||
* val root = treeNode("World") { ... }
|
||||
* val root = tree("World") { ... }
|
||||
* ```
|
||||
* @see [ChildDeclarationInterface.treeNode]
|
||||
* @param root Root element of new tree.
|
||||
* @see [ChildDeclarationInterface.child]
|
||||
*/
|
||||
@JvmSynthetic
|
||||
inline fun<reified T> treeNode(value: T, childDeclaration: ChildDeclaration<T>): TreeNode<T> {
|
||||
val treeNode = TreeNode(value)
|
||||
inline fun<reified T> tree(root: T, childDeclaration: ChildDeclaration<T>): TreeNode<T> {
|
||||
val treeNode = TreeNode(root)
|
||||
treeNode.childDeclaration()
|
||||
return treeNode
|
||||
}
|
@ -114,16 +114,31 @@ class TreeNodeTest {
|
||||
|
||||
@Test
|
||||
fun kotlinExtTest() {
|
||||
val root = treeNode("World") {
|
||||
val root = TreeNode("World")
|
||||
val northA = TreeNode("North America")
|
||||
val europe = TreeNode("Europe")
|
||||
root.addChild(northA)
|
||||
root.addChild(europe)
|
||||
|
||||
val usa = TreeNode("USA")
|
||||
northA.addChild(usa)
|
||||
|
||||
val poland = TreeNode("Poland")
|
||||
val france = TreeNode("France")
|
||||
europe.addChild(poland)
|
||||
europe.addChild(france)
|
||||
|
||||
val rootExt = treeNode("World") {
|
||||
treeNode("North America") {
|
||||
treeNode("USA")
|
||||
}
|
||||
treeNode("Europe") {
|
||||
treeNode("Poland")
|
||||
treeNode("Germany")
|
||||
treeNode("France")
|
||||
}
|
||||
}
|
||||
println(root)
|
||||
assertEquals(root.toString(), rootExt.toString())
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user