• [Swift]LeetCode108. 将有序数组转换为二叉搜索树 | Convert Sorted Array to Binary Search Tree


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9709029.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

    For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

    Example:

    Given the sorted array: [-10,-3,0,5,9],
    
    One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:
    
          0
         / 
       -3   9
       /   /
     -10  5

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    示例:

    给定有序数组: [-10,-3,0,5,9],
    
    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
    
          0
         / 
       -3   9
       /   /
     -10  5

    36ms
     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func sortedArrayToBST(_ nums: [Int]) -> TreeNode? {
    16         return makeTree(nums, 0, nums.count - 1)
    17     }
    18     
    19     func makeTree(_ nums: [Int], _ start: Int, _ end: Int) -> TreeNode? {
    20         guard start <= end else { return nil }
    21 
    22         let mid = (start + end) / 2
    23         let node = TreeNode(nums[mid])
    24         node.left = makeTree(nums, start, mid - 1)
    25         node.right = makeTree(nums, mid + 1, end)
    26         return node
    27     }
    28 }

    40ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func sortedArrayToBST(_ nums: [Int]) -> TreeNode? {
    16         guard nums.count != 0 else {
    17             return nil
    18         }
    19         
    20         let root = TreeNode(nums[nums.count / 2])
    21         root.left = sortedArrayToBST(Array(nums[0..<nums.count / 2]))
    22         root.right = sortedArrayToBST(Array(nums[nums.count / 2 + 1..<nums.count]))
    23 
    24         return root
    25     }
    26 }

    40ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func sortedArrayToBST(_ nums: [Int]) -> TreeNode? {
    16         guard nums.count > 0 else {
    17             return nil
    18         }
    19 
    20         guard nums.count > 1 else {
    21             let treeNode = TreeNode(nums[0])
    22             return treeNode
    23         }
    24 
    25         let middleIndex = nums.count/2
    26         let treeNode = TreeNode(nums[middleIndex])
    27 
    28         
    29         let leftSubarray = Array(nums[0..<middleIndex])
    30         let rightSubarray = ((middleIndex+1) < nums.count)
    31                             ? Array(nums[(middleIndex+1)..<nums.count])
    32                             : []
    33 
    34         let leftNode = sortedArrayToBST(leftSubarray)
    35         let rightNode = sortedArrayToBST(rightSubarray)
    36 
    37         treeNode.left = leftNode
    38         treeNode.right = rightNode
    39         return treeNode
    40     }
    41 }

    44ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15   func sortedArrayToBST(_ nums: [Int]) -> TreeNode? {
    16     return sortedArrayToBST1(nums, 0, nums.count)
    17   }
    18   
    19   private func sortedArrayToBST1(_ nums: [Int], _ beg: Int, _ end: Int) -> TreeNode? {
    20     if beg == end { return nil }
    21     if end - beg == 1 { return TreeNode(nums[beg]) }
    22     
    23     let mid = (beg + end) / 2
    24     let node = TreeNode(nums[mid])
    25     node.left = sortedArrayToBST1(nums, beg, mid)
    26     node.right = sortedArrayToBST1(nums, mid + 1, end)
    27     return node
    28   }
    29 }

    52ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func sortedArrayToBST(_ nums: [Int]) -> TreeNode? {
    16         if nums.count == 0 {
    17             return nil
    18         }
    19         if nums.count == 1 {
    20             return TreeNode(nums[0])
    21         }
    22         
    23         let mid = nums.count / 2
    24         let root = TreeNode(nums[mid])
    25         
    26         root.left = sortedArrayToBST(Array(nums[0..<mid]))
    27         if mid + 1 < nums.count {
    28             root.right = sortedArrayToBST(Array(nums[mid+1..<nums.count]))
    29         }
    30         return root
    31     }
    32 }

    1052ms

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     public var val: Int
     5  *     public var left: TreeNode?
     6  *     public var right: TreeNode?
     7  *     public init(_ val: Int) {
     8  *         self.val = val
     9  *         self.left = nil
    10  *         self.right = nil
    11  *     }
    12  * }
    13  */
    14 class Solution {
    15     func sortedArrayToBST(_ nums: [Int]) -> TreeNode? {
    16          if nums.count == 0 {
    17             return nil;
    18         }
    19         
    20        
    21         
    22         return createTree(nums, 0, nums.count - 1)
    23     }
    24        func createTree(_ nums: [Int], _ left: Int, _ right: Int) -> TreeNode? {
    25         
    26         if left > right {
    27             return nil
    28         }
    29         
    30         let mid = (left + right + 1) / 2 
    31         let node = TreeNode(nums[mid])
    32         
    33         node.left = createTree(nums, left, mid - 1)
    34         node.right = createTree(nums, mid + 1, right)
    35         
    36         return node;
    37     }
    38 }
  • 相关阅读:
    数据库锁表及阻塞的原因和解决办法
    JS中的this都有什么用?
    vue打包要点
    Vue.js的虚拟dom
    JS继承方式
    JS中的浅拷贝和深拷贝。
    详解计算机原码,反码,补码。
    经常被问到的面试题1
    eslint规则说明
    git常用命令总结
  • 原文地址:https://www.cnblogs.com/strengthen/p/9709029.html
Copyright © 2020-2023  润新知