Решение
/**
* Example:
* var ti = TreeNode(5)
* var v = ti.`val`
* Definition for a binary tree node.
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
fun sumRootToLeaf(root: TreeNode?): Int {
fun dfs(node: TreeNode?, sum: Int): Int {
if (node == null) return 0
// Формируем новое число, сдвигая текущую сумму влево и добавляя значение текущего узла
val newSum = (sum shl 1) or node.`val`
// Если узел листовой, возвращаем полученное число
if (node.left == null && node.right == null) return newSum
// Рекурсивно вычисляем сумму для левого и правого поддеревьев
return dfs(node.left, newSum) + dfs(node.right, newSum)
}
return dfs(root, 0)
}