DDSA Solutions

Pair Sum in BST

Time: O(n)
Space: O(n)
Advertisement

Intuition

Find if BST contains a pair with given sum. Two-pointer using in-order (ascending) and reverse in-order (descending).

Algorithm

  1. 1Two stacks for in-order and reverse in-order iteration. Two-pointer approach: sum < target advance left, else advance right.

Common Pitfalls

  • Same as LC 653. Can also convert to sorted array via in-order, then two-pointer. O(n) time O(h) space.
Pair Sum in BST.java
Java
// Approach: Augmented BST inorder + two pointers, or HashSet: traverse and check if (target - node.val) is in set.
// Time: O(n) Space: O(n)
class Node {
    int data;
    Node left, right;

    public Node(int d) {
        data = d;
        left = right = null;
    }
}

class Solution {
    HashSet<Integer> s = new HashSet<>();

    boolean findTarget(Node root, int target) {
        if (root == null)
            return false;
        boolean l = findTarget(root.left, target);
        boolean temp = false;
        if (s.contains(target - root.data))
            temp = true;
        s.add(root.data);
        boolean r = findTarget(root.right, target);
        return (l || r) || temp;
    }
}
Advertisement
Was this solution helpful?