https://leetcode.com/problems/minimum-absolute-difference-in-bst/description | Easy |
---|
Дано бинарное дерево поиска (BST). Требуется найти минимальную абсолютную разницу между значениями любых двух узлов дерева.
Input:
root = [4, 2, 6, 1, 3]Output:
1
Input:
root = [1, 0, 48, null, null, 12, 49]Output:
1
/**
* 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 getMinimumDifference(root: TreeNode?): Int {
var minDiff = Int.MAX_VALUE
var prev: TreeNode? = null
// Вспомогательная функция для обхода дерева in-order (симметричный обход)
fun inorder(node: TreeNode?) {
if (node == null) return
// Обходим левое поддерево
inorder(node.left)
// Вычисляем разницу с предыдущим узлом
if (prev != null) {
minDiff = minOf(minDiff, node.`val` - prev!!.`val`)
}
// Обновляем предыдущий узел
prev = node
// Обходим правое поддерево
inorder(node.right)
}
// Запускаем обход дерева
inorder(root)
return minDiff
}
O(n) — Проходим все узлы дерева один раз.
O(h) — Используется стек рекурсии, где h — высота дерева (в среднем O(log n), в худшем случае O(n)).