Range lookup
Given x and y co-ordinates find the closest restaurant. Each restaurant is represented by their co-ordinates
Solution
- Use 2 BST for storage
 - One using x co-ordinate and the other with y co-ordinate
 - Do a range lookup on both the BST based on x,y co-ordinate we're looking up
 - Now intersect the result of bot the range lookups to get the nearest restaurant
 - Here we'll address only the range lookup part of the problem
 - Using the BST property, check if a current node is within range or not
 - Then traverse only to the left, right or both if the value lies within range
 
Code
def range_lookup_helper(bst_root, interval)
    result = []
    range_lookup(bst_root, interval, result)
end
def range_lookup(node, interval, result)
    return nil if bst.nil?
    # Node is within range, check both children
    if interval.start <= node.value && interval.end >= node.value
        result = range_lookup(node.left, interval, result)
        result << node.value
        result = range_lookup(node.right, interval, result)
    # Node is outside the range
    elsif interval.end < node.value
        result = range_lookup(node.left, interval, result)
    else
        result = range_lookup(node.right, interval, result)
    end
    return result
end
Complexity
- Time: O(n) since we are potentially visiting all the nodes in the BST.