The idea is to carry a set of the elements you have traversed so far and check if (sum-currentElement) exists in the set. Time and space complexity is O(n)

```
public boolean helper(TreeNode root, HashSet<Integer> set, int k){
if (root == null) return false;
if (set.contains(k - root.val)) return true;
set.add(root.val);
return helper(root.left, set, k) || helper(root.right, set, k);
}
public boolean findTarget(TreeNode root, int k) {
HashSet<Integer> set = new HashSet<Integer>();
return helper(root, set, k);
}
```