给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
案例 1:
输入:
5
/ \
3 6
/ \ \
2 4 7Target = 9
输出: True
案例 2:
输入:
5
/ \
3 6
/ \ \
2 4 7Target = 28
输出: False
解题思路:这道题很明显不可以使用递归左右子树的方法来解题,由于是二叉查找树,那么我们可以中序遍历存到一个链表中,链表中的顺序是升序排列的,再使用两个指针来查找,是否有符合条件的节点。
class Solution {
List<Integer> list = new ArrayList<>();
public boolean findTarget(TreeNode root, int k) {
order(root);
int i = 0,j = list.size()-1;
while(i<j){
int sum = list.get(i)+list.get(j);
if(sum == k) return true;
if(sum < k){
i++;
}else{
j--;
}
}
return false;
}
private void order(TreeNode root){
if(root == null) return;
order(root.left);
list.add(root.val);
order(root.right);
}
}