https://leetcode.com/problems/diameter-of-binary-tree 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 diameterOfBinaryTree(root: TreeNode?): Int {
    var diameter = 0

    // Вспомогательная функция для вычисления высоты поддерева и обновления диаметра
    fun height(node: TreeNode?): Int {
        if (node == null) return 0

        // Рекурсивно вычисляем высоту левого и правого поддеревьев
        val leftHeight = height(node.left)
        val rightHeight = height(node.right)

        // Обновляем диаметр, если текущий путь длиннее
        diameter = maxOf(diameter, leftHeight + rightHeight)

        // Возвращаем высоту текущего узла
        return maxOf(leftHeight, rightHeight) + 1
    }

    // Запускаем вычисление высоты дерева
    height(root)

    return diameter
}