Search Range in Binary Search Tree(二叉查找树中搜索区间)

http://www.lintcode.com/en/problem/search-range-in-binary-search-tree/?rand=true

/**
 * 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 searchRange(TreeNode root, int k1, int k2) {
        // write your code here
        ArrayList list = new ArrayList<>();
//        使用递归
        tree(root, k1, k2, list);
        return list;
    }

    private void tree(TreeNode root, int k1, int k2, ArrayList integers) {
        if (root == null) {
            return;
        }
        if (root.val < k1) {
//            当前值小于K1,那么只需要考虑右边
            tree(root.right, k1, k2, integers);
        } else if (root.val > k2) {
//            当前值大于K2,只需要考虑左边
            tree(root.left, k1, k2, integers);
        } else {
//            注意要求结果为升序
            tree(root.left, k1, k2, integers);
            integers.add(root.val);
            tree(root.right, k1, k2, integers);
        }
    }
}

你可能感兴趣的:(Search Range in Binary Search Tree(二叉查找树中搜索区间))