[Swift]LeetCode108. 將有序數組轉換爲二叉搜索樹 | Convert Sorted Array to Binary Search Tree

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-tziitlxf-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

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

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.git

Example:github

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。微信

示例:this

給定有序數組: [-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 }

40msspa

 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 }

40mscode

 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 }

44mshtm

 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 }
相關文章
相關標籤/搜索