如果你还记得Leetcode 第一题,那么这题主体思路就已经有了,定义一个set来判断k - node.val 是否存在于 set中,如果不存在就将当前node.val存到set中
Leetcode 第一题是一个数组,依次遍历就好了,但是这个题是一个二叉树,所以需要用到树的遍历
class Solution {
Set<Integer> set = new HashSet<>();
public boolean findTarget(TreeNode root, int k) {
return preorder(root,k) == 1? true : false;
}
private int preorder(TreeNode node,int k ){
if(node == null)
return 0;
if(set.contains((k-node.val)))
return 1;
else
set.add(node.val);
if(preorder(node.left,k) == 1){
return 1;
}
if(preorder(node.right,k) == 1){
return 1;
}
return 0;
}
}
上面的代码写的不漂亮
可以参考下面的
class Solution {
Set<Integer> set = new HashSet<Integer>();
public boolean findTarget(TreeNode root, int k) {
if (root == null) {
return false;
}
if (set.contains(k - root.val)) {
return true;
}
set.add(root.val);
return findTarget(root.left, k) || findTarget(root.right, k);
}
}