Решение
/**
* 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
}