zoukankan      html  css  js  c++  java
  • LeetCode 108: Convert Sorted Array to Binary Search Tree

    /**
     * 108. Convert Sorted Array to Binary Search Tree
     * 1. Time:O(n)  Space:O(n)
     * 2. Time:O(n)  Space:O(n)
     */
    
    // 1. Time:O(n)  Space:O(n)
    class Solution {
        private int[] nums;
        public TreeNode sortedArrayToBST(int[] nums) {
            this.nums = nums;
            return helper(0,this.nums.length-1);
        }
        
        private TreeNode helper(int left, int right){
            if(left>right) return null;
            int mid = (left+right)/2;
            TreeNode root = new TreeNode(nums[mid]);
            root.left = helper(left,mid-1);
            root.right = helper(mid+1,right);
            return root;
        }
    }
    
    // 2. Time:O(n)  Space:O(n)
    class Solution {
        
        private class MyTreeNode{
            TreeNode root;
            int start;
            int end;
            
            public MyTreeNode(TreeNode root, int start, int end){
                this.root = root;
                this.start = start;
                this.end = end;
            }
        }
        
        public TreeNode sortedArrayToBST(int[] nums) {
            if(nums==null || nums.length==0) return null;
            Stack<MyTreeNode> stack = new Stack<>();
            int start = 0;
            int end = nums.length;
            int mid = (start+end) >>> 1;
            TreeNode root = new TreeNode(nums[mid]);
            TreeNode cur = root;
            stack.push(new MyTreeNode(root,start,end));
            while(!stack.isEmpty() || end-start>1){
                while(end-start>1){
                    mid = (start+end) >>> 1;
                    end = mid;
                    mid = (start+end) >>> 1;
                    cur.left = new TreeNode(nums[mid]);
                    cur = cur.left;
                    stack.push(new MyTreeNode(cur,start,end));
                }
                MyTreeNode tmp = stack.pop();
                start = tmp.start;
                end = tmp.end;
                mid = (start+end) >>> 1;
                cur = tmp.root;
                start = mid + 1;
                if(start<end){
                    mid = (start+end) >>> 1;
                    cur.right = new TreeNode(nums[mid]);
                    cur = cur.right;
                    stack.push(new MyTreeNode(cur,start,end));
                }
            }
            return root;
        }
    }
    
  • 相关阅读:
    js 判断多个一样的name
    VisualSVN Server的配置和使用方法 图文
    file get contents 访问不了域名原因
    js confirm函数 删除提示
    关于PHP的curl开启问题
    重置svn地址
    google 火狐 模拟显示手机页面插件
    开启Apache mod_rewrite模块完全解答
    zend studio 9.0.4 破解、汉化和字体颜色及快捷键相关设置
    zend studio 8 修字体和大小
  • 原文地址:https://www.cnblogs.com/AAAmsl/p/12842050.html
Copyright © 2011-2022 走看看