1. 程式人生 > >LintCode-----11.二叉查詢樹中搜索區間

LintCode-----11.二叉查詢樹中搜索區間

原題目

中序遍歷後比較 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);
        }
    }