题目描述:
给定一个二叉搜索树和一个目标结果,如果 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
) ;
}
}