https://leetcode.com/problems/second-minimum-node-in-a-binary-tree | Easy |
---|
Дано бинарное дерево, где каждый узел имеет либо 0, либо 2 дочерних узла, и все значения узлов уникальны. Корень имеет минимальное значение среди всех узлов. Найдите второй минимальный узел в дереве. Если второго минимального значения нет, верните -1.
Input:
root = [2, 2, 5, null, null, 5, 7]Output:
5Explanation:
Второе минимальное значение — 5.
Input:
root = [2, 2, 2]Output:
-1Explanation:
Все узлы имеют одно значение.
/**
* 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 findSecondMinimumValue(root: TreeNode?): Int {
if (root == null) return -1
var secondMin = Long.MAX_VALUE
val minVal = root.`val`
fun dfs(node: TreeNode?) {
if (node == null) return
if (node.`val` > minVal && node.`val` < secondMin) {
secondMin = node.`val`.toLong() // Обновляем второе минимальное значение
} else if (node.`val` == minVal) {
dfs(node.left)
dfs(node.right)
}
}
dfs(root)
return if (secondMin == Long.MAX_VALUE) -1 else secondMin.toInt()
}
O(n), где n — количество узлов в дереве, так как каждый узел посещается один раз.
O(h), где h — высота дерева, для стека вызовов.