https://coderun.yandex.ru/problem/depth-added-elements/description Средняя

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

class Node(val value: Int) {
    var left: Node? = null
    var right: Node? = null
}

class BST {
    var root: Node? = null

    fun insert(value: Int): Int {
        if (root == null) {
            root = Node(value)
            return 1
        }
        return insertRec(root, value, 1)
    }

    private fun insertRec(node: Node?, value: Int, depth: Int): Int {
        if (node == null) return depth
        return when {
            value < node.value -> {
                if (node.left == null) {
                    node.left = Node(value)
                    depth + 1
                } else {
                    insertRec(node.left, value, depth + 1)
                }
            }
            value > node.value -> {
                if (node.right == null) {
                    node.right = Node(value)
                    depth + 1
                } else {
                    insertRec(node.right, value, depth + 1)
                }
            }
            else -> -1
        }
    }
}

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val bst = BST()
    val parts = reader.readLine().split(" ").map { it.toInt() }
    val depths = mutableListOf<Int>()

    for (num in parts) {
        if (num == 0) break
        val depth = bst.insert(num)
        if (depth != -1) depths.add(depth)
    }

    writer.write(depths.joinToString(" ") + "\\n")

    reader.close()
    writer.flush()
    writer.close()
}