【Leetcode刷题第四天】653. 两数之和 IV - 输入 BST [JAVA]
题目描述:
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
示例 1:
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true
示例 2:
输入: root = [5,3,6,2,4,null,7], k = 28
输出: false
来源于:Leetcode
思路:
使用双指针与dfs遍历。
代码如下:
class Solution {
//创建一个可变长数组列表
List<Integer> result=new ArrayList<Integer>();
public boolean findTarget(TreeNode root, int k) {
dfs(root);
//双指针
int left=0;
int right=result.size()-1;
while(left<right){
if(result.get(left)+result.get(right)>k){
right--;
}
else if(result.get(left)+result.get(right)<k){
left++;
}
else{
return true;
}
}
return false;
}
public void dfs(TreeNode root){
if(root==null){
return;
}
dfs(root.left);
result.add(root.val);
dfs(root.right);
}
}
总结:
双指针遍历二叉树有时会更加简便~