题目描述:
思路:k=x+y;
利用递归,每次查看set集合内是否存在y=k-root.val;如果存在,返回true;否则将root.val放入到set中去,接着往下遍历。
注意不可以先将root.val放入在进行判断,这样是错的。假设k=10,树只有一个根节点root.val=5,先放入在判断会导致程序以为存在5=10-5而返回true;但是其实只有他自己。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
Set<Integer> set=new HashSet();
return find(root,k,set);
}
boolean find(TreeNode root,int k,Set<Integer> set){
if(root==null){
return false;
}
if(set.contains(k-root.val)){
return true;
}
set.add(root.val);
return find(root.left,k,set)||find(root.right,k,set);
}
}