成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[LeetCode] 108. Convert Sorted Array to Binary Sea

SKYZACK / 1055人閱讀

摘要:二分法找到數(shù)組的中位數(shù),置為樹的,遞歸找到前半段和后半段的中位數(shù),分別置為左右子樹。

Problem

Given a sorted (increasing order) array, Convert it to create a binary tree with minimal height.

Example

Given [1,2,3,4,5,6,7], return

     4
   /   
  2     6
 /     / 
1   3  5   7
Note

二分法找到數(shù)組的中位數(shù),置為樹的root,遞歸找到前半段和后半段的中位數(shù),分別置為左右子樹。直到start = mid或end = mid為止。

Solution Recursive
public class Solution {
    public TreeNode sortedArrayToBST(int[] A) {  
        return helper(0, A.length - 1, A);
    }  
    public TreeNode helper(int start, int end, int[]A) {
        if (start > end) return null;
        int mid = start + (end - start) / 2;
        TreeNode root = new TreeNode(A[mid]);
        root.left = helper(start, mid - 1, A);
        root.right = helper(mid + 1, end, A);
        return root;
    }
}
Iterative
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        if (nums == null || nums.length == 0) return null;
        TreeNode head = new TreeNode(0);
        
        Deque nodeStack = new LinkedList<>();
        Deque leftIndexStack = new LinkedList<>();
        Deque rightIndexStack = new LinkedList<>();
        
        nodeStack.push(head);
        leftIndexStack.push(0);
        rightIndexStack.push(nums.length-1);
        
        while (!nodeStack.isEmpty()) {
            TreeNode curNode = nodeStack.pop();
            int left = leftIndexStack.pop();
            int right = rightIndexStack.pop();
            int mid = left+(right-left)/2;
            curNode.val = nums[mid];
            
            if (left < mid) {
                curNode.left = new TreeNode(0);
                nodeStack.push(curNode.left);
                leftIndexStack.push(left);
                rightIndexStack.push(mid-1);
            }
            
            if (mid < right) {
                curNode.right = new TreeNode(0);
                nodeStack.push(curNode.right);
                leftIndexStack.push(mid+1);
                rightIndexStack.push(right);
            }
        }
        
        return head;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65563.html

相關(guān)文章

  • [Leetcode-Tree] Convert Sorted Array to Binary Sea

    摘要:解題思路平衡二叉樹,其實(shí)就是數(shù)組中間的數(shù)作為根,利用遞歸實(shí)現(xiàn)左子樹和右子樹的構(gòu)造。 Convert Sorted Array to Binary Search TreeGiven an array where elements are sorted in ascending order, convert it to a height balanced BST. 1.解題思路平衡二叉樹,...

    songze 評論0 收藏0
  • [Leetcode] Convert Sorted Array/List to Binary Sea

    摘要:我們可以用和兩個(gè)值來限定子樹在鏈表中的位置,通過遞歸的方式,深入找到最左邊,然后開始順序遍歷鏈表鏈表當(dāng)前節(jié)點(diǎn)作為全局變量,這樣無論遞歸在哪我們都能拿到,同時(shí)建樹。代碼先遞歸的計(jì)算左子樹創(chuàng)造根節(jié)點(diǎn)最后遞歸的計(jì)算右子樹 Convert Sorted List to Binary Search Tree Given a singly linked list where elements ar...

    wpw 評論0 收藏0
  • leetcode部分題目答案之JavaScript版

    摘要:自己沒事刷的一些的題目,若有更好的解法,希望能夠一起探討項(xiàng)目地址 自己沒事刷的一些LeetCode的題目,若有更好的解法,希望能夠一起探討 Number Problem Solution Difficulty 204 Count Primes JavaScript Easy 202 Happy Number JavaScript Easy 190 Reverse Bi...

    alphahans 評論0 收藏0
  • 前端 | 每天一個(gè) LeetCode

    摘要:在線網(wǎng)站地址我的微信公眾號完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號: showImg(htt...

    張漢慶 評論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月匯總(100 題攻略)

    摘要:月下半旬攻略道題,目前已攻略題。目前簡單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...

    tain335 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<