您的位置:首页 > 其它

lintcode-medium-Search Range in Binary Search Tree

2016-04-05 12:48 387 查看
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


[/code]

/**
* Definition of TreeNode:
* public class TreeNode {
*     public int val;
*     public TreeNode left, right;
*     public TreeNode(int val) {
*         this.val = val;
*         this.left = this.right = null;
*     }
* }
*/
public class Solution {
/**
* @param root: The root of the binary search tree.
* @param k1 and k2: range k1 to k2.
* @return: Return all keys that k1<=key<=k2 in ascending order.
*/
public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) {
// write your code here

ArrayList<Integer> result = new ArrayList<Integer>();

if(root == null)
return result;

if(root.left == null && root.right == null){
if(root.val >= k1 && root.val <= k2){
result.add(root.val);
return result;
}
else
return result;
}

ArrayList<Integer> left = searchRange(root.left, k1, k2);
result.addAll(left);

if(root.val >= k1 && root.val <= k2)
result.add(root.val);

ArrayList<Integer> right = searchRange(root.right, k1, k2);
result.addAll(right);

return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: