653. Two Sum IV - Input is a BST (M)
Given the root
of a Binary Search Tree and a target number k
, return true
if there exist two elements in the BST such that their sum is equal to the given target.
Example 1:
Input: root = [5,3,6,2,4,null,7], k = 9
Output: true
Example 2:
Input: root = [5,3,6,2,4,null,7], k = 28
Output: false
Constraints:
The number of nodes in the tree is in the range
[1, 104]
.-104 <= Node.val <= 104
root
is guaranteed to be a valid binary search tree.-105 <= k <= 105
Solution:
Solution 1: hashset + DFS, Time Complexity:O(n)
, Space Complexity:O(n)
Set<Integer> hashset = new HashSet<>();
public boolean findTarget(TreeNode root, int k) {
if (root == null) {
return false;
}
if (hashset.contains(k - root.val)) {
return true;
}
hashset.add(root.val);
return findTarget(root.left, k) || findTarget(root.right, k);
}
Solution 2: inorder traversal得到递增的array,two pointers. Time Complexity:O(n)
, Space Complexity:O(n)
public boolean findTarget(TreeNode root, int k) {
List<Integer> nums = new ArrayList<>();
inorder(root, nums);
for(int i = 0, j = nums.size()-1; i<j;){
if(nums.get(i) + nums.get(j) == k)return true;
if(nums.get(i) + nums.get(j) < k)i++;
else j--;
}
return false;
}
public void inorder(TreeNode root, List<Integer> nums){
if(root == null)return;
inorder(root.left, nums);
nums.add(root.val);
inorder(root.right, nums);
}
Last updated
Was this helpful?