LintCode-----11.二叉查找树中搜索区间
2017-08-28 17:05
417 查看
原题目
中序遍历后比较 8056s
中序遍历后比较 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); } }
相关文章推荐
- Lintcode---二叉查找树中搜索区间
- lintcode&九章算法——No.11 二叉查找树中搜索区间 ? 待解决
- LintCode 11 二叉查找树中搜索区间
- LintCode-61.搜索区间
- LintCode 61-搜索区间
- LintCode:搜索区间
- lintcode-二叉查找树中搜索区间-11
- 11 - 二叉查找树中搜索区间
- Lintcode 搜索区间
- lintcode search-range-in-binary-search-tree 二叉搜索树中搜索区间
- LintCode 11-二叉查找树中搜索区间
- Lintcode 11. 二叉查找树中搜索区间
- LintCode 11二叉查找树中搜索区间
- LintCode——搜索区间
- LintCode-搜索区间
- 11. 二叉查找树中搜索区间
- lintcode-11-二叉查找树中搜索区间
- lintcode: search for a range 搜索区间
- 11 - 二叉查找树中搜索区间
- LintCode 11. 二叉查找树中搜索区间