LintCode-----11.二叉查詢樹中搜索區間
阿新 • • 發佈:2019-02-06
中序遍歷後比較 8056s
import java.util.*;
import java.lang.*;
public class Solution {
/*
* @param root: param root: The root of the binary search tree
* @param k1: An integer
* @param k2: An integer
* @return: return: Return all keys that k1<=key<=k2 in ascending order
*/
public List<Integer> searchRange(TreeNode root, int k1, int k2) {
// write your code here
List<Integer> all=new ArrayList<>();
inOrder(root,all);
List<Integer> result=new ArrayList<>();
for(int i=0;i<all.size();i++){
int temp=all.get(i);
if(temp>=k1&&temp<=k2){
result.add(temp);
}
}
return result;
}
public void inOrder(TreeNode root,List<Integer> list){
if(root!=null){
inOrder(root.left,list);
list.add(root.val);
inOrder(root.right,list);
}
}
}
九章解答
4000+s,我就說嘛,之前沒有利用二叉搜尋樹的條件
private ArrayList<Integer> results;
public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) {
results = new ArrayList<Integer>();
helper(root, k1, k2);
return results;
}
private void helper(TreeNode root, int k1, int k2) {
if (root == null) {
return;
}
//當前值比k1都大,看看他的左兒子的情況,要找更小的數來比較,右邊就不看了。
if (root.val > k1) {
helper(root.left, k1, k2);
}
if (root.val >= k1 && root.val <= k2) {
results.add(root.val);
}
//當前的值比k2都小,看看右兒子的情況,要找最接近k2的數,左邊就不看了。
if (root.val < k2) {
helper(root.right, k1, k2);
}
}