mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2025-07-01 15:27:58 +02:00
Tree as android library.
This commit is contained in:
44
treedatastructure/build.gradle
Normal file
44
treedatastructure/build.gradle
Normal file
@ -0,0 +1,44 @@
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion "29.0.2"
|
||||
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 29
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
consumerProguardFiles 'consumer-rules.pro'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation 'androidx.appcompat:appcompat:1.0.2'
|
||||
implementation 'androidx.core:core-ktx:1.0.2'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||
}
|
||||
|
||||
ext {
|
||||
PUBLISH_GROUP_ID = 'com.github.adriankuta'
|
||||
PUBLISH_ARTIFACT_ID = 'tree-structure'
|
||||
PUBLISH_VERSION = android.defaultConfig.versionName
|
||||
}
|
||||
|
||||
apply from: "${rootProject.projectDir}/scripts/publish-mavencentral.gradle"
|
0
treedatastructure/consumer-rules.pro
Normal file
0
treedatastructure/consumer-rules.pro
Normal file
21
treedatastructure/proguard-rules.pro
vendored
Normal file
21
treedatastructure/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
@ -0,0 +1,24 @@
|
||||
package com.github.adriankuta.datastructure.tree
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
assertEquals("com.github.adriankuta.datastructure.tree.test", appContext.packageName)
|
||||
}
|
||||
}
|
2
treedatastructure/src/main/AndroidManifest.xml
Normal file
2
treedatastructure/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,2 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.github.adriankuta.datastructure.tree" />
|
@ -0,0 +1,67 @@
|
||||
package com.github.adriankuta.datastructure.tree
|
||||
|
||||
class TreeNode<T>(val value: T) {
|
||||
|
||||
private var parent: TreeNode<T>? = null
|
||||
private val children = mutableListOf<TreeNode<T>>()
|
||||
|
||||
fun addChild(child: TreeNode<T>) {
|
||||
child.parent = this
|
||||
children += child
|
||||
}
|
||||
|
||||
fun removeChild(child: TreeNode<T>): Boolean {
|
||||
if (children.isEmpty()) {
|
||||
return false
|
||||
}
|
||||
|
||||
val nestedChildRemoved = children.map {
|
||||
it.removeChild(child)
|
||||
}.reduce { acc, b -> acc or b }
|
||||
|
||||
return children.remove(child) or nestedChildRemoved
|
||||
}
|
||||
|
||||
fun getParent(): TreeNode<T>? = parent
|
||||
|
||||
fun getChildren(): List<TreeNode<T>> = children
|
||||
|
||||
fun size(): Int {
|
||||
if (children.isEmpty())
|
||||
return 0
|
||||
return children.size +
|
||||
children.sumBy { it.size() }
|
||||
|
||||
}
|
||||
|
||||
fun depth(): Int {
|
||||
|
||||
val childrenMaxDepth = children.map { it.depth() }.max() ?: 0
|
||||
return childrenMaxDepth + 1
|
||||
}
|
||||
|
||||
fun allItems(): List<T> {
|
||||
return children.map { value }
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
val stringBuilder = StringBuilder()
|
||||
print(stringBuilder, "", "")
|
||||
return stringBuilder.toString()
|
||||
}
|
||||
|
||||
private fun print(stringBuilder: StringBuilder, prefix: String, childrenPrefix: String) {
|
||||
stringBuilder.append(prefix)
|
||||
stringBuilder.append(value)
|
||||
stringBuilder.append('\n')
|
||||
val childIterator = children.iterator()
|
||||
while (childIterator.hasNext()) {
|
||||
val node = childIterator.next()
|
||||
if(childIterator.hasNext()) {
|
||||
node.print(stringBuilder, "$childrenPrefix├── ", "$childrenPrefix│ ")
|
||||
} else {
|
||||
node.print(stringBuilder, "$childrenPrefix└── ", "$childrenPrefix ")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
3
treedatastructure/src/main/res/values/strings.xml
Normal file
3
treedatastructure/src/main/res/values/strings.xml
Normal file
@ -0,0 +1,3 @@
|
||||
<resources>
|
||||
<string name="app_name">Tree Data Structure</string>
|
||||
</resources>
|
@ -0,0 +1,17 @@
|
||||
package com.github.adriankuta.datastructure.tree
|
||||
|
||||
import org.junit.Test
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
class ExampleUnitTest {
|
||||
@Test
|
||||
fun addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user