Сложность: medium
Даны корни двух бинарных деревьев поиска, root1 и root2, верните true, если и только если существует узел в первом дереве и узел во втором дереве, значения которых в сумме равны заданному целому числу target.
Пример:
Input: root1 = [0,-10,10], root2 = [5,1,7,0,2], target = 18
Output: false
👨💻 Алгоритм:
1⃣Создайте два пустых множества node_set1 и node_set2. Выполните обход дерева root1, добавляя значения каждого узла в node_set1, и выполните обход дерева root2, добавляя значения каждого узла в node_set2.
2⃣Итерация по элементам в node_set1: для каждого элемента value1 проверяйте, находится ли target - value1 в node_set2.
3⃣Если target - value1 находится в node_set2, верните true. Если после завершения итерации не найдено ни одной подходящей пары, верните false.
😎 Решение:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def dfs(self, node, node_set):
if not node:
return
self.dfs(node.left, node_set)
node_set.add(node.val)
self.dfs(node.right, node_set)
def twoSumBSTs(self, root1, root2, target):
node_set1 = set()
node_set2 = set()
self.dfs(root1, node_set1)
self.dfs(root2, node_set2)
for value1 in node_set1:
if target - value1 in node_set2:
return True
return False
Ставь 👍 и забирай 📚 Базу знаний