给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
输入: root = [5,3,6,2,4,null,7], k = 9
输出: true
输入: root = [5,3,6,2,4,null,7], k = 28
输出: false
输入: root = [2,1,3], k = 4
输出: true
输入: root = [2,1,3], k = 1
输出: false
输入: root = [2,1,3], k = 3
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
List<Integer> list = new ArrayList<>();
public boolean findTarget(TreeNode root, int k) {
if (root == null) return false;
bl(root);
for (int i = 0; i < list.size(); i++){
int a = list.get(i);
int b = k - a;
for (int j = i + 1; j < list.size(); j++){
if (list.get(j) == b && j != i) return true;
}
}
return false;
}
public void bl(TreeNode root){
//base case
if (root == null) return;
bl(root.left);
list.add(root.val);
bl(root.right);
}
}
class Solution {
List<Integer> list = new ArrayList<>();
public boolean findTarget(TreeNode root, int k) {
inorder(root);
int l = 0, r = list.size() - 1;
while (l < r) {
if (list.get(l) + list.get(r) < k) {
l++;
} else if (list.get(l) + list.get(r) > k) {
r--;
} else {
return true;
}
}
return false;
}
public void inorder(TreeNode root) {
if (root == null) return;
inorder(root.left);
list.add(root.val);
inorder(root.right);
}
}
class Solution {
List<Integer> memo = new ArrayList<>();
public boolean findTarget(TreeNode root, int k) {
if (root == null) return false;
if (memo.contains(k - root.val)) {
return true;
} else {
// 备忘录添加值
memo.add(root.val);
}
return findTarget(root.left, k) || findTarget(root.right, k);
}
}