• 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获取URL中的QueryStirng字符串
    GridView分页操作
    c语言string的函数
    char *a 与char a[] 的区别
    htonl(),htons(),ntohl(),ntons()--大小端模式转换函数
    nfs 原理详解
    NFS和mount常用参数详解 本文目录
    网络安全过滤软件
    SNMP协议详解
    win7开启snmp服务
  • 原文地址:https://www.cnblogs.com/AAAmsl/p/12842050.html
Copyright © 2020-2023  润新知