12 Commits

Author SHA1 Message Date
3f166aced0 Renamed functions. 2020-01-19 22:55:32 +01:00
8dbbd3b2f8 Update _config.yml 2020-01-17 22:51:13 +01:00
f8206013c2 Update _config.yml 2020-01-17 22:50:46 +01:00
cf3e5e2c6a Update _config.yml 2020-01-17 22:49:42 +01:00
5cdf1a9cbc Update _config.yml 2020-01-17 22:48:19 +01:00
c30d516bd2 Set theme jekyll-theme-minimal 2020-01-16 15:08:45 +01:00
dc0317daba Delete CNAME 2020-01-12 23:11:27 +01:00
9834cbf07c Create CNAME 2020-01-12 23:11:01 +01:00
1b08504ab9 Set theme jekyll-theme-slate 2020-01-12 20:40:50 +01:00
d49d813ab5 Update README.md 2020-01-12 16:30:22 +01:00
5dd80035e4 Update README.md 2020-01-11 18:52:42 +01:00
3e5401bd9d Updated README 2020-01-11 00:55:15 +01:00
7 changed files with 90 additions and 45 deletions

View File

@ -1,47 +1,73 @@
# Tree (Data Structure) # Tree (Data Structure)
[![maven](https://img.shields.io/maven-central/v/com.github.adriankuta/tree-structure?style=plastic)](https://search.maven.org/artifact/com.github.adriankuta/tree-structure) [![maven](https://img.shields.io/maven-central/v/com.github.adriankuta/tree-structure?style=plastic)](https://mvnrepository.com/artifact/com.github.adriankuta/tree-structure)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=plastic)](https://github.com/AdrianKuta/Design-Patterns-Kotlin/blob/master/LICENSE) [![License: MIT](https://img.shields.io/github/license/AdrianKuta/Tree-Data-Structure?style=plastic)](https://github.com/AdrianKuta/Design-Patterns-Kotlin/blob/master/LICENSE)
[![CircleCI](https://img.shields.io/circleci/build/github/AdrianKuta/Tree-Data-Structure/master?label=CircleCI&style=plastic)](https://circleci.com/gh/AdrianKuta/Tree-Data-Structure) [![CircleCI](https://img.shields.io/circleci/build/github/AdrianKuta/Tree-Data-Structure/master?label=CircleCI&style=plastic&logo=circleci)](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. Simple implementation to store object in tree structure. Method `toString()` is overrided to provide nice tree view in logs.
## Usage ## Usage
**Kotlin**
```kotlin ```kotlin
val root = TreeNode<String>("Root") val root = TreeNode("World")
val beveragesNode = TreeNode<String>("Beverages") val northA = TreeNode("North America")
val curdNode = TreeNode<String>("Curd") val europe = TreeNode("Europe")
root.addChild(beveragesNode) root.addChild(northA)
root.addChild(curdNode) root.addChild(europe)
val teaNode = TreeNode<String>("tea") val usa = TreeNode("USA")
val coffeeNode = TreeNode<String>("coffee") northA.addChild(usa)
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 poland = TreeNode("Poland")
val france = TreeNode("France")
europe.addChild(poland)
europe.addChild(france)
println(root) println(root)
System.out.println("Remove: ${curdNode.value}") ```
root.removeChild(curdNode)
System.out.println("Remove: ${gingerTeaNode.value}") **Pretty Kotlin**
root.removeChild(gingerTeaNode)
println(root) ```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:* *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 ## Download

3
_config.yml Normal file
View File

@ -0,0 +1,3 @@
theme: jekyll-theme-minimal
title: Tree Data Structure
logo: images/console_output.png

View File

@ -15,7 +15,7 @@ android {
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 29 targetSdkVersion 29
versionCode 1 versionCode 1
versionName "1.1.0" versionName "1.2.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro' consumerProguardFiles 'consumer-rules.pro'

View File

@ -5,17 +5,17 @@ interface ChildDeclarationInterface<T> {
/** /**
* This method is used to easily create child in node. * This method is used to easily create child in node.
* ``` * ```
* val root = treeNode("World") { * val root = tree("World") {
* treeNode("North America") { * child("North America") {
* treeNode("USA") * child("USA")
* } * }
* treeNode("Europe") { * child("Europe") {
* treeNode("Poland") * child("Poland")
* treeNode("Germany") * child("Germany")
* } * }
* } * }
* ``` * ```
*/ */
@JvmSynthetic @JvmSynthetic
fun treeNode(value: T, childDeclaration: ChildDeclaration<T>? = null) fun child(value: T, childDeclaration: ChildDeclaration<T>? = null)
} }

View File

@ -27,7 +27,7 @@ open class TreeNode<T>(val value: T) : Iterable<TreeNode<T>>, ChildDeclarationIn
} }
@JvmSynthetic @JvmSynthetic
override fun treeNode(value: T, childDeclaration: ChildDeclaration<T>?) { override fun child(child: T, childDeclaration: ChildDeclaration<T>?) {
val newChild = TreeNode(value) val newChild = TreeNode(value)
if(childDeclaration != null) if(childDeclaration != null)
newChild.childDeclaration() newChild.childDeclaration()

View File

@ -5,13 +5,14 @@ typealias ChildDeclaration<T> = ChildDeclarationInterface<T>.() -> Unit
/** /**
* This method can be used to initialize new tree. * 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 @JvmSynthetic
inline fun<reified T> treeNode(value: T, childDeclaration: ChildDeclaration<T>): TreeNode<T> { inline fun<reified T> tree(root: T, childDeclaration: ChildDeclaration<T>): TreeNode<T> {
val treeNode = TreeNode(value) val treeNode = TreeNode(root)
treeNode.childDeclaration() treeNode.childDeclaration()
return treeNode return treeNode
} }

View File

@ -114,16 +114,31 @@ class TreeNodeTest {
@Test @Test
fun kotlinExtTest() { 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("North America") {
treeNode("USA") treeNode("USA")
} }
treeNode("Europe") { treeNode("Europe") {
treeNode("Poland") treeNode("Poland")
treeNode("Germany") treeNode("France")
} }
} }
println(root) println(root)
assertEquals(root.toString(), rootExt.toString())
} }