https://leetcode.com/problems/sum-of-root-to-leaf-binary-numbers Easy

Решение

/**
 * 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)
}