diff --git a/problems/0101.对称二叉树.md b/problems/0101.对称二叉树.md
index b9dff99c..69bc41d3 100644
--- a/problems/0101.对称二叉树.md
+++ b/problems/0101.对称二叉树.md
@@ -574,7 +574,87 @@ var isSymmetric = function(root) {
};
```
+## Swift:
+> 递归
+```swift
+func isSymmetric(_ root: TreeNode?) -> Bool {
+ return _isSymmetric(root?.left, right: root?.right)
+}
+func _isSymmetric(_ left: TreeNode?, right: TreeNode?) -> Bool {
+ // 首先排除空节点情况
+ if left == nil && right == nil {
+ return true
+ } else if left == nil && right != nil {
+ return false
+ } else if left != nil && right == nil {
+ return false
+ } else if left!.val != right!.val {
+ // 进而排除数值不相等的情况
+ return false
+ }
+
+ // left 和 right 都不为空, 且数值也相等就递归
+ let inSide = _isSymmetric(left!.right, right: right!.left)
+ let outSide = _isSymmetric(left!.left, right: right!.right)
+ return inSide && outSide
+}
+```
+
+> 迭代 - 使用队列
+```swift
+func isSymmetric2(_ root: TreeNode?) -> Bool {
+ guard let root = root else {
+ return true
+ }
+ var queue = [TreeNode?]()
+ queue.append(root.left)
+ queue.append(root.right)
+ while !queue.isEmpty {
+ let left = queue.removeFirst()
+ let right = queue.removeFirst()
+ if left == nil && right == nil {
+ continue
+ }
+ if left == nil || right == nil || left?.val != right?.val {
+ return false
+ }
+ queue.append(left!.left)
+ queue.append(right!.right)
+ queue.append(left!.right)
+ queue.append(right!.left)
+ }
+ return true
+}
+```
+
+> 迭代 - 使用栈
+```swift
+func isSymmetric3(_ root: TreeNode?) -> Bool {
+ guard let root = root else {
+ return true
+ }
+ var stack = [TreeNode?]()
+ stack.append(root.left)
+ stack.append(root.right)
+ while !stack.isEmpty {
+ let left = stack.removeLast()
+ let right = stack.removeLast()
+
+ if left == nil && right == nil {
+ continue
+ }
+ if left == nil || right == nil || left?.val != right?.val {
+ return false
+ }
+ stack.append(left!.left)
+ stack.append(right!.right)
+ stack.append(left!.right)
+ stack.append(right!.left)
+ }
+ return true
+}
+```
-----------------------
diff --git a/problems/0104.二叉树的最大深度.md b/problems/0104.二叉树的最大深度.md
index 85b41548..7038598b 100644
--- a/problems/0104.二叉树的最大深度.md
+++ b/problems/0104.二叉树的最大深度.md
@@ -653,5 +653,82 @@ int maxDepth(struct TreeNode* root){
}
```
+## Swift
+
+>二叉树最大深度
+```swift
+// 递归 - 后序
+func maxDepth1(_ root: TreeNode?) -> Int {
+ return _maxDepth1(root)
+}
+func _maxDepth1(_ root: TreeNode?) -> Int {
+ if root == nil {
+ return 0
+ }
+ let leftDepth = _maxDepth1(root!.left)
+ let rightDepth = _maxDepth1(root!.right)
+ return 1 + max(leftDepth, rightDepth)
+}
+
+// 层序
+func maxDepth(_ root: TreeNode?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ var queue = [TreeNode]()
+ queue.append(root)
+ var res: Int = 0
+ while !queue.isEmpty {
+ res += 1
+ for _ in 0 ..< queue.count {
+ let node = queue.removeFirst()
+ if let left = node.left {
+ queue.append(left)
+ }
+ if let right = node.right {
+ queue.append(right)
+ }
+ }
+ }
+ return res
+}
+```
+
+>N叉树最大深度
+```swift
+// 递归
+func maxDepth(_ root: Node?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ var depth = 0
+ for node in root.children {
+ depth = max(depth, maxDepth(node))
+ }
+ return depth + 1
+}
+
+// 迭代-层序遍历
+func maxDepth1(_ root: Node?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ var depth = 0
+ var queue = [Node]()
+ queue.append(root)
+ while !queue.isEmpty {
+ let size = queue.count
+ depth += 1
+ for _ in 0 ..< size {
+ let node = queue.removeFirst()
+ for child in node.children {
+ queue.append(child)
+ }
+ }
+ }
+ return depth
+}
+```
+
-----------------------
diff --git a/problems/0111.二叉树的最小深度.md b/problems/0111.二叉树的最小深度.md
index fc93d918..a439322a 100644
--- a/problems/0111.二叉树的最小深度.md
+++ b/problems/0111.二叉树的最小深度.md
@@ -404,8 +404,51 @@ var minDepth = function(root) {
};
```
+## Swift
+> 递归
+```Swift
+func minDepth(_ root: TreeNode?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ if root.left == nil && root.right != nil {
+ return 1 + minDepth(root.right)
+ }
+ if root.left != nil && root.right == nil {
+ return 1 + minDepth(root.left)
+ }
+ return 1 + min(minDepth(root.left), minDepth(root.right))
+}
+```
+> 迭代
+```Swift
+func minDepth(_ root: TreeNode?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ var res = 0
+ var queue = [TreeNode]()
+ queue.append(root)
+ while !queue.isEmpty {
+ res += 1
+ for _ in 0 ..< queue.count {
+ let node = queue.removeFirst()
+ if node.left == nil && node.right == nil {
+ return res
+ }
+ if let left = node.left {
+ queue.append(left)
+ }
+ if let right = node.right {
+ queue.append(right)
+ }
+ }
+ }
+ return res
+}
+```
-----------------------
diff --git a/problems/0222.完全二叉树的节点个数.md b/problems/0222.完全二叉树的节点个数.md
index 754a6094..8d38bace 100644
--- a/problems/0222.完全二叉树的节点个数.md
+++ b/problems/0222.完全二叉树的节点个数.md
@@ -522,5 +522,73 @@ int countNodes(struct TreeNode* root){
}
```
+## Swift:
+
+> 递归
+```swift
+func countNodes(_ root: TreeNode?) -> Int {
+ return _countNodes(root)
+}
+func _countNodes(_ root: TreeNode?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ let leftCount = _countNodes(root.left)
+ let rightCount = _countNodes(root.right)
+ return 1 + leftCount + rightCount
+}
+```
+
+> 层序遍历
+```Swift
+func countNodes(_ root: TreeNode?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ var res = 0
+ var queue = [TreeNode]()
+ queue.append(root)
+ while !queue.isEmpty {
+ let size = queue.count
+ for _ in 0 ..< size {
+ let node = queue.removeFirst()
+ res += 1
+ if let left = node.left {
+ queue.append(left)
+ }
+ if let right = node.right {
+ queue.append(right)
+ }
+ }
+ }
+ return res
+}
+```
+
+> 利用完全二叉树性质
+```Swift
+func countNodes(_ root: TreeNode?) -> Int {
+ guard let root = root else {
+ return 0
+ }
+ var leftNode = root.left
+ var rightNode = root.right
+ var leftDepth = 0
+ var rightDepth = 0
+ while leftNode != nil {
+ leftNode = leftNode!.left
+ leftDepth += 1
+ }
+ while rightNode != nil {
+ rightNode = rightNode!.right
+ rightDepth += 1
+ }
+ if leftDepth == rightDepth {
+ return (2 << leftDepth) - 1
+ }
+ return countNodes(root.left) + countNodes(root.right) + 1
+}
+```
+
-----------------------