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))
+    }
+}
+```
+
 <!-- tabs:end -->
 
 <!-- end -->
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))
+    }
+}
+```
+
 <!-- tabs:end -->
 
 <!-- end -->
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))
+    }
+}