题目描述
给定一个二叉查找树和范围[k1, k2]。
按照升序返回给定范围内的节点值。
样例1
输入:{
5},6,10
输出:[]
5
它将被序列化为 {
5}
没有数字介于6和10之间
样例2
输入:{
20,8,22,4,12},10,22
输出:[12,20,22]
解释:
20
/ \
8 22
/ \
4 12
它将被序列化为 {
20,8,22,4,12}
[12,20,22]介于10和22之间
解题思路
考点:
二叉查找树 :
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
题解:从给定的BST的根节点开始查找,如果当前节点大于k1,就向左子树搜索,如果当前节点小于k2,就继续向右子树搜索。如果位于[k1,k2],存入结果。
java题解
public class Solution {
private ArrayList<Integer> results;
/**
* @param root: The root of the binary search tree.
* @param k1 and k2: range k1 to k2.
* @return: Return all keys that k1<=key<=k2 in increasing order.
*/
public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) {
results = new ArrayList<Integer>