diff --git a/lcci/04.02.Minimum Height Tree/README.md b/lcci/04.02.Minimum Height Tree/README.md index f800937065e0b..458db7f154dee 100644 --- a/lcci/04.02.Minimum Height Tree/README.md +++ b/lcci/04.02.Minimum Height Tree/README.md @@ -214,6 +214,39 @@ var sortedArrayToBST = function (nums) { }; ``` +```swift +/** +* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* +* init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) { +* self.val = val +* self.left = left +* self.right = right +* } +* } +*/ + +class Solution { + private var nums: [Int]! + + func sortedArrayToBST(_ nums: [Int]) -> TreeNode? { + self.nums = nums + return dfs(0, nums.count - 1) + } + + private func dfs(_ l: Int, _ r: Int) -> TreeNode? { + if l > r { + return nil + } + let mid = (l + r) / 2 + return TreeNode(nums[mid], dfs(l, mid - 1), dfs(mid + 1, r)) + } +} +``` + diff --git a/lcci/04.02.Minimum Height Tree/README_EN.md b/lcci/04.02.Minimum Height Tree/README_EN.md index 55fc3253863bc..3dd522b6e52aa 100644 --- a/lcci/04.02.Minimum Height Tree/README_EN.md +++ b/lcci/04.02.Minimum Height Tree/README_EN.md @@ -237,6 +237,39 @@ var sortedArrayToBST = function (nums) { }; ``` +```swift +/** +* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* +* init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) { +* self.val = val +* self.left = left +* self.right = right +* } +* } +*/ + +class Solution { + private var nums: [Int]! + + func sortedArrayToBST(_ nums: [Int]) -> TreeNode? { + self.nums = nums + return dfs(0, nums.count - 1) + } + + private func dfs(_ l: Int, _ r: Int) -> TreeNode? { + if l > r { + return nil + } + let mid = (l + r) / 2 + return TreeNode(nums[mid], dfs(l, mid - 1), dfs(mid + 1, r)) + } +} +``` + diff --git a/lcci/04.02.Minimum Height Tree/Solution.swift b/lcci/04.02.Minimum Height Tree/Solution.swift new file mode 100644 index 0000000000000..c924d671e4fc4 --- /dev/null +++ b/lcci/04.02.Minimum Height Tree/Solution.swift @@ -0,0 +1,30 @@ +/** +* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* +* init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) { +* self.val = val +* self.left = left +* self.right = right +* } +* } +*/ + +class Solution { + private var nums: [Int]! + + func sortedArrayToBST(_ nums: [Int]) -> TreeNode? { + self.nums = nums + return dfs(0, nums.count - 1) + } + + private func dfs(_ l: Int, _ r: Int) -> TreeNode? { + if l > r { + return nil + } + let mid = (l + r) / 2 + return TreeNode(nums[mid], dfs(l, mid - 1), dfs(mid + 1, r)) + } +}