前言
这道题就是树和两数之和的一个结合把。只要会遍历基本就能做,用了一个set来方便找。
题目
源码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
//方法1
// Set<Integer> set=new HashSet<>();
// return find(root,k,set);
// 方法1
// 方法2
Set<Integer>set=new HashSet<>();
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
if(queue.peek()!=null){
TreeNode node=queue.poll();
if(set.contains(k-node.val)){
return true;
}
set.add(node.val);
queue.offer(node.right);
queue.offer(node.left);
}else{
queue.poll();
}
}
return false;
// 方法2
}
// 方法1
// public boolean find(TreeNode node ,int k ,Set<Integer> set){
// if(node==null){
// return false;
// }
// if(set.contains(k-node.val)){
// return true;
// }
// set.add(node.val);
// return find(node.left,k,set) || find(node.right,k,set);
// }
// 方法1
}