LintCode - Search Range in Binary Search Tree

Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all the keys of tree in range k1 to k2. i.e. print all x such that k1<=x<=k2 and x is a key of given BST. Return all the keys in ascending order.

Example

If k1 = 10 and k2 = 22, then your function should return[12, 20, 22].

    20
   /  \
  8   22
 / \
4   12

这道题也是Google的面经题。

Solution:

public List<Integer> searchRange(TreeNode root, int k1, int k2) {
    List<Integer> result = new ArrayList<>();
    help(result, root, k1, k2);
    return result;
}

private void help(List<Integer> result, TreeNode node, int k1, int k2) {
    if(node == null) return;
    if(node.val >= k1) {
        help(result, node.left, k1, k2);
    }
    if(node.val >= k1 && node.val <= k2) {
        result.add(node.val);
    }
    if(node.val > k2) return;
    help(result, node.right, k1, k2);
}

猜你喜欢

转载自yuanhsh.iteye.com/blog/2231762