public boolean findTarget(TreeNode root, int k) {
List<Integer> arr = new ArrayList<>();
Map<Integer,Integer> map = new HashMap<>();
dfs(root,arr);
int len = arr.size();
Integer[] num = new Integer[len];
arr.toArray(num);
for (int i=0;i<len;i++){
if (map.containsKey(k - num[i])){
return true;
}
map.put(num[i],i);
}
return false;
}
void dfs(TreeNode root , List<Integer> list){
if (root == null) return;
dfs(root.left,list);
list.add(root.val);
dfs(root.right,list);
}
public boolean findTarget(TreeNode root, int k) {
Set<Integer> set = new HashSet<>();
return find(root,set,k);
}
boolean find(TreeNode root,Set<Integer> set,int k){
if (root == null) return false;
if (set.contains(k - root.val)){
return true;
}
set.add(root.val);
return find(root.left,set,k) || find(root.right,set,k);
}
public boolean findTarget(TreeNode root, int k) {
Set<Integer> set = new HashSet<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
if (queue.peek() != null){
TreeNode node = queue.remove();
if (set.contains(k - node.val))
return true;
set.add(node.val);
queue.add(node.right);
queue.add(node.left);
}else {
queue.remove();
}
}
return false;
}