Search Range in Binary Search Tree

来源:互联网 发布:非结构化数据的处理 编辑:程序博客网 时间:2024/06/06 01:56

Given two values k1 and k2 (where k1 < k2) and a root pointer to a Binary Search Tree. Find all the keys of tree in range k1 to k2. i.e. print all x such that k1<=x<=k2 and x is a key of given BST. Return all the keys in ascending order.

java 使用中序遍历的性质

/** * 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) {        // write your code here        List<Integer> value = new ArrayList<>();        if (root == null) {            return value;        }        List<Integer> list = inorder(root);        for (int i = 0; i < list.size(); i++) {            if (k1 <= list.get(i) && k2 >= list.get(i)) {                value.add(list.get(i));            }        }        return value;    }    private List<Integer> inorder(TreeNode root) {        List<Integer> list = new ArrayList<>();        if (root == null) {            return list;        }        List<Integer> left = inorder(root.left);        List<Integer> right = inorder(root.right);        list.addAll(left);        list.add(root.val);        list.addAll(right);        return list;            }}
python使用左右子树的性质

"""Definition of TreeNode:class TreeNode:    def __init__(self, val):        self.val = val        self.left, self.right = None, None"""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    """    result = []    def searchRange(self, root, k1, k2):        # write your code here        if root is None:            return self.result        self.findRange(root, k1, k2)        return self.result            def findRange(self, root, k1, k2):        if root is None:            return        if root.val > k1:            self.findRange(root.left, k1, k2)        if root.val >= k1 and root.val <= k2:            self.result.append(root.val)        if root.val < k2:            self.findRange(root.right, k1, k2)        



原创粉丝点击