**Approach 1**

Keep a set of existing values and check for the complement value as you traverse the BST.

```
var findTarget = function(root, k) {
const values = new Set();
let found = false;
function inorder(node) {
if (!node) {
return;
}
inorder(node.left);
if (values.has(k - node.val)) {
found = true;
return;
}
values.add(node.val);
inorder(node.right);
}
inorder(root);
return found;
};
```

**Approach 2**

This problem can be solved by composing two steps:

- Collect all values into a sorted list.
- You have just reduced the problem into a Two Sum problem on a sorted list, simply use any of the methods proposed here. In my case I opted for a two pointer approach.

```
var findTarget = function(root, k) {
const values = [];
function inorder(node) {
if (!node) {
return;
}
inorder(node.left);
values.push(node.val);
inorder(node.right);
}
inorder(root);
let start = 0, end = values.length - 1;
while (start < end) {
const total = values[start] + values[end];
if (total > k) {
end--;
} else if (total < k) {
start++;
} else {
return true;
}
}
return false;
};
```