Skip to main content

twoSumIV

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findTarget(self, root: Optional[TreeNode], k: int) -> bool:
if not root:
return(False)

self.freqs = defaultdict(int)
self.k = k
self.found = False

def dfs(node):
# exit early
if self.found or not node:
return

# k = 10, val = 7, need 3 elsewhere
# k = -4, val = 8, need -4 - 8 = 12
# k = -3, val = -6, need 3
# k = 10, val = -3, need 13 elsewhere
# k = 10, val = 13 need 10 - 13 = -3
# if (k < 0 and node.val > 0) or (node.val < 0 and k > 0):
# need = abs(self.k - node.val)
# else:
need = self.k - node.val

# checking this val first, so pre-order
if self.freqs[need] > 0:
self.found = True

self.freqs[node.val] += 1

dfs(node.left)
dfs(node.right)

dfs(root)

return(self.found)