https://leetcode.com/problems/two-sum-iv-input-is-a-bst | Easy |
---|
Дано корневое дерево поиска (BST) и целое число k
. Определите, существуют ли в дереве два элемента, сумма которых равна k
.
Input:
root = [5, 3, 6, 2, 4, null, 7], k = 9Output:
true
Input:
root = [5, 3, 6, 2, 4, null, 7], k = 28Output:
false
/**
* 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 findTarget(root: TreeNode?, k: Int): Boolean {
val seen = mutableSetOf<Int>()
fun dfs(node: TreeNode?): Boolean {
if (node == null) return false
if (k - node.`val` in seen) return true // Если разность уже встречалась, возвращаем true
seen.add(node.`val`) // Добавляем текущий элемент в множество
return dfs(node.left) || dfs(node.right) // Проверяем левого и правого потомков
}
return dfs(root)
}
O(n), где n — количество узлов в дереве, так как каждый узел посещается один раз.
O(n), для хранения множества seen
и стека вызовов.