• Search range in binary search tree


    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.
    
    Example
    For example, if k1 = 10 and k2 = 22, then your function should print 12, 20 and 22.
    
           /        
              22
    
      /     
          12

    遍历, 没用到bst的性质:

    public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) {
            ArrayList<Integer>  result = new ArrayList<Integer>();
            Stack<TreeNode> stack = new Stack<TreeNode>();
            
            if (root == null) {
                return result;
            }
            
            TreeNode cur = root;
            while (! stack.isEmpty() || cur != null) {
                while (cur != null) {
                    stack.push(cur);
                    cur = cur.left;
                }
                
                cur = stack.pop();
    			//中序遍历的改动点
                if (k1 <= cur.val && cur.val <= k2) {
                    result.add(cur.val);
                }
                cur = cur.right;
            }
            return result;*/
        }	
    

    递归

    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;
            }
            if (root.val > k1) {
                helper(root.left, k1, k2);
            }
            if (root.val >= k1 && root.val <= k2) {
                results.add(root.val);
            }
            if (root.val < k2) {
                helper(root.right, k1, k2);
            }
    }
    

      

  • 相关阅读:
    字符串-06. IP地址转换
    字符串-05. 字符串循环左移
    字符串-04. 字符串逆序
    BZOJ 3110
    UOJ 34 fft板子
    BZOJ 2716
    BZOJ 2243
    BZOJ 3697
    BZOJ 1176
    BZOJ 2599
  • 原文地址:https://www.cnblogs.com/apanda009/p/7239874.html
Copyright © 2020-2023  润新知