题目描述:
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
例子:
输入:
5
/ \
3 6
/ \ \
2 4 7
Target = 9
输出: True
思路:
实际上是遍历二叉搜索树,寻找两个节点的值相加等于目标值。
可以遍历二叉树将结果存入list集合中,再对list集合进行遍历,判断两数之和是否有等于目标值的情况。
可以利用HashSet对树中的元素进行筛选(HashSet中不能有重复的元素)。
优化:寻找两数之和,可以看做是已知一个数,然后在树中寻找是否存在目标值与已知数的差值。
class Solution {
public boolean findTarget(TreeNode root, int k) {
Set<Integer> set = new HashSet<Integer>() ;
return preOrder(root,set,k);
}
public boolean preOrder(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 preOrder(root.left,set,k) || preOrder(root.right,set,k) ;
}
}