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.
Have you met this question in a real interview?
Yes
Example
If k1 = 10
and k2 = 22
, then your function should return[12, 20, 22]
.
20
/ \
8 22
/ \
4 12
Tags
分析:
这题还是很简单的,只要根据root的值和k1, k2的值分三种情况讨论就可以了。
1 /**
2 * Definition of TreeNode:
3 * public class TreeNode {
4 * public int val;
5 * public TreeNode left, right;
6 * public TreeNode(int val) {
7 * this.val = val;
8 * this.left = this.right = null;
9 * }
10 * }
11 */
12 public class Solution {
13 /**
14 * @param root: The root of the binary search tree.
15 * @param k1 and k2: range k1 to k2.
16 * @return: Return all keys that k1<=key<=k2 in ascending order.
17 */
18 public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) {
19 // write your code here
20 ArrayList<Integer> list = new ArrayList<Integer>();
21 if (k1 <= k2) {
22 traverse(root, k1, k2, list);
23 }
24 Collections.sort(list);
25 return list;
26 }
27
28 public void traverse(TreeNode node, int k1, int k2, ArrayList<Integer> list) {
29 if (node != null) {
30 if (node.val < k1) {
31 traverse(node.right, k1, k2, list);
32 } else if (node.val > k2) {
33 traverse(node.left, k1, k2, list);
34 } else {
35 list.add(node.val);
36 traverse(node.left, k1, k2, list);
37 traverse(node.right, k1, k2, list);
38 }
39 }
40 }
41 }