Tree is a widely used abstract data type (ADT)—or data structure implementing this ADT—that simulates a hierarchical tree structure, with a root value and subtrees of children with a parent node, represented as a set of linked nodes.
A tree data structure can be defined recursively (locally) as a collection of nodes (starting at a root node), where each node is a data structure consisting of a value, together with a list of references to nodes (the "children"), with the constraints that no reference is duplicated, and none points to the root.
source: Wikipedia
class TreeNode<T>(value:T){
var value:T = value
var parent:TreeNode<T>? = null
var children:MutableList<TreeNode<T>> = mutableListOf()
fun addChild(node:TreeNode<T>){
children.add(node)
node.parent = this
}
override fun toString(): String {
var s = "${value}"
if (!children.isEmpty()) {
s += " {" + children.map { it.toString() } + " }"
}
return s
}
}