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 page for Tree
Kotlin playground link
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.isNotEmpty()) {
s += " {" + children.map { it.toString() } + " }"
}
return s
}
}