lintcode二叉查找树中搜索区间 java
2017-12-15 13:54
316 查看
给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。
样例
如果有 k1 =
你的程序应该返回
样例
如果有 k1 =
10和 k2 =
22,
你的程序应该返回
[12, 20, 22].
20 / \ 8 22 / \ 4 12
/** * 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: 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) { if(root == null){ return null; } List<Integer> list = new ArrayList<Integer>(); if(root.val <=k2 && root.val >= k1){ List<Integer> retLeft = searchRange(root.left, k1, k2); if(null != retLeft){ list.addAll(retLeft); } list.add(root.val); List<Integer> retRight = searchRange(root.right, k1, k2); if(null != retRight){ list.addAll(retRight); } }else if(root.val > k2){ List<Integer> retLeft = searchRange(root.left, k1, k2); if(null != retLeft){ list.addAll(retLeft); } }else if(root.val < k1){ List<Integer> re a495 tRight = searchRange(root.right, k1, k2); if(null != retRight){ list.addAll(retRight); } } return list; } }
相关文章推荐
- Java数据结构----树--二叉查找(搜索或排序)树BST
- java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能
- 快速查找java类和快速关键字全项目搜索
- Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
- Oracle存储过程(分页、模糊查找、排序、按字段区间查找)etc.以及JAVA代码
- (算法)二分查找的搜索区间
- Java基础——搜索(查找)算法
- java 12:数组的搜索——线性查找及二分法查找
- 第2章 递归与分治策略,二分搜索技术(查找不成功时,返回区间位置)
- [Java]二分搜索(二分查找)
- Java中字符串中子串的查找方法
- java中的折半查找(二分查找)
- 置位比特位置查找java
- BestCoder Round #2 1001 TIANKENG’s restaurant(区间内查找)
- Java 分治算法实现排序数索引(二分搜索)
- [搜索]ElasticSearch Java Api(一)
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- Java连接数据库完整代码 查找和插入
- Java中字符串中子串的查找共有四种方法(indexof())
- Java学习之java命令如何查找Classes