17 Commits

Author SHA1 Message Date
c2ebd5dfe4 child function is now returning TreeNode 2020-01-21 15:39:44 +01:00
c320411a40 child function is now returning TreeNode 2020-01-21 15:38:44 +01:00
3c3d418aa2 v1.2.2 2020-01-21 15:11:32 +01:00
f00ab975dc Fixed tree initialization in Kotlin 2020-01-21 15:11:04 +01:00
eb2d5f07be Extracted prettyString from toString() method to new method prettyString() 2020-01-20 15:42:15 +01:00
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 99 additions and 51 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 poland = TreeNode("Poland")
val normalTeaNode = TreeNode<String>("normal tea") val france = TreeNode("France")
teaNode.addChild(gingerTeaNode) europe.addChild(poland)
teaNode.addChild(normalTeaNode) europe.addChild(france)
println(root.prettyString())
```
val yogurtNode = TreeNode<String>("yogurt") **Pretty Kotlin**
val lassiNode = TreeNode<String>("lassi")
curdNode.addChild(yogurtNode)
curdNode.addChild(lassiNode)
println(root) ```kotlin
System.out.println("Remove: ${curdNode.value}") val root =
root.removeChild(curdNode) tree("World") {
System.out.println("Remove: ${gingerTeaNode.value}") child("North America") {
root.removeChild(gingerTeaNode) child("USA")
println(root) }
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.prettyString());
``` ```
*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.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro' consumerProguardFiles 'consumer-rules.pro'

View File

@ -5,17 +5,18 @@ 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")
* } * }
* } * }
* ``` * ```
* @return New created TreeNode.
*/ */
@JvmSynthetic @JvmSynthetic
fun treeNode(value: T, childDeclaration: ChildDeclaration<T>? = null) fun child(value: T, childDeclaration: ChildDeclaration<T>? = null): TreeNode<T>
} }

View File

@ -27,11 +27,12 @@ open class TreeNode<T>(val value: T) : Iterable<TreeNode<T>>, ChildDeclarationIn
} }
@JvmSynthetic @JvmSynthetic
override fun treeNode(value: T, childDeclaration: ChildDeclaration<T>?) { override fun child(value: T, childDeclaration: ChildDeclaration<T>?): TreeNode<T> {
val newChild = TreeNode(value) val newChild = TreeNode(value)
if(childDeclaration != null) if(childDeclaration != null)
newChild.childDeclaration() newChild.childDeclaration()
_children.add(newChild) _children.add(newChild)
return newChild
} }
/** /**
@ -91,6 +92,10 @@ open class TreeNode<T>(val value: T) : Iterable<TreeNode<T>>, ChildDeclarationIn
} }
override fun toString(): String { override fun toString(): String {
return value.toString()
}
fun prettyString(): String {
val stringBuilder = StringBuilder() val stringBuilder = StringBuilder()
print(stringBuilder, "", "") print(stringBuilder, "", "")
return stringBuilder.toString() return stringBuilder.toString()

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,17 +114,29 @@ class TreeNodeTest {
@Test @Test
fun kotlinExtTest() { fun kotlinExtTest() {
val root = treeNode("World") { val root = TreeNode("World")
treeNode("North America") { val northA = TreeNode("North America")
treeNode("USA") 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 = tree("World") {
child("North America") {
child("USA")
} }
treeNode("Europe") { child("Europe") {
treeNode("Poland") child("Poland")
treeNode("Germany") child("France")
} }
} }
println(root) assertEquals(root.prettyString(), rootExt.prettyString())
} }
} }