package com.interview.basics.search.array.unsorted; import com.interview.basics.model.tree.BinarySearchTree; import com.interview.basics.model.tree.BinaryTreeNode; import com.interview.basics.model.tree.IntervalBinarySearchTree; import com.interview.utils.models.Range; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 9/24/14 * Time: 4:19 PM * * Give a set of intervals, and find a interval intersects in the given search interval. * * Solution: * Build a interval search tree based on BST, using min as the key, and keep the max endpoint in subtree rooted at the end * For Insert: * 1. insert interval in BST * 2. update the max in each node on search path * * For Search: * a. if the interval in node intersects query interval, return interval * b. else if left subtree is null or the max endpoint in left subtree is less than lo, go right. * c. else go left */ public class IntervalBSTSearcher { private IntervalBinarySearchTree tree; public IntervalBSTSearcher(Range[] input) { tree = new IntervalBinarySearchTree(); for(Range range : input) tree.insert(range); } public Range find(Range range) { return tree.search(range); } }