Two Sum IV - Input is a BST
Input:
5
/ \
3 6
/ \ \
2 4 7
Target = 9
Output:
TrueInput:
5
/ \
3 6
/ \ \
2 4 7
Target = 28
Output:
FalseAnalysis
Solution
Last updated
Input:
5
/ \
3 6
/ \ \
2 4 7
Target = 9
Output:
TrueInput:
5
/ \
3 6
/ \ \
2 4 7
Target = 28
Output:
FalseLast updated
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
Queue<TreeNode> queue = new LinkedList();
Set<Integer> set = new HashSet();
queue.offer(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
if (set.contains(k - node.val)) {
return true;
}
set.add(node.val);
}
return false;
}
}public class Solution {
public boolean findTarget(TreeNode root, int k) {
List < Integer > list = new ArrayList();
inorder(root, list);
int l = 0, r = list.size() - 1;
while (l < r) {
int sum = list.get(l) + list.get(r);
if (sum == k)
return true;
if (sum < k)
l++;
else
r--;
}
return false;
}
public void inorder(TreeNode root, List < Integer > list) {
if (root == null)
return;
inorder(root.left, list);
list.add(root.val);
inorder(root.right, list);
}
}public class Solution {
public boolean findTarget(TreeNode root, int k) {
Set < Integer > set = new HashSet();
return find(root, k, set);
}
public boolean find(TreeNode root, int k, Set < Integer > set) {
if (root == null)
return false;
if (set.contains(k - root.val))
return true;
set.add(root.val);
return find(root.left, k, set) || find(root.right, k, set);
}
}