@@ -574,7 +574,87 @@ var isSymmetric = function(root) {
574574};
575575```
576576
577+ ## Swift:
577578
579+ > 递归
580+ ```swift
581+ func isSymmetric (_ root: TreeNode?) -> Bool {
582+ return _ isSymmetric(root?.left, right: root?.right)
583+ }
584+ func _ isSymmetric(_ left: TreeNode?, right: TreeNode?) -> Bool {
585+ // 首先排除空节点情况
586+ if left == nil && right == nil {
587+ return true
588+ } else if left == nil && right != nil {
589+ return false
590+ } else if left != nil && right == nil {
591+ return false
592+ } else if left!.val != right!.val {
593+ // 进而排除数值不相等的情况
594+ return false
595+ }
596+
597+ // left 和 right 都不为空, 且数值也相等就递归
598+ let inSide = _ isSymmetric(left!.right, right: right!.left)
599+ let outSide = _ isSymmetric(left!.left, right: right!.right)
600+ return inSide && outSide
601+ }
602+ ```
603+
604+ > 迭代 - 使用队列
605+ ```swift
606+ func isSymmetric2(_ root: TreeNode?) -> Bool {
607+ guard let root = root else {
608+ return true
609+ }
610+ var queue = [TreeNode?]()
611+ queue.append(root.left)
612+ queue.append(root.right)
613+ while !queue.isEmpty {
614+ let left = queue.removeFirst()
615+ let right = queue.removeFirst()
616+ if left == nil && right == nil {
617+ continue
618+ }
619+ if left == nil || right == nil || left?.val != right?.val {
620+ return false
621+ }
622+ queue.append(left!.left)
623+ queue.append(right!.right)
624+ queue.append(left!.right)
625+ queue.append(right!.left)
626+ }
627+ return true
628+ }
629+ ```
630+
631+ > 迭代 - 使用栈
632+ ``` swift
633+ func isSymmetric3 (_ root : TreeNode? ) -> Bool {
634+ guard let root = root else {
635+ return true
636+ }
637+ var stack = [TreeNode? ]()
638+ stack.append (root.left )
639+ stack.append (root.right )
640+ while ! stack.isEmpty {
641+ let left = stack.removeLast ()
642+ let right = stack.removeLast ()
643+
644+ if left == nil && right == nil {
645+ continue
646+ }
647+ if left == nil || right == nil || left? .val != right? .val {
648+ return false
649+ }
650+ stack.append (left! .left )
651+ stack.append (right! .right )
652+ stack.append (left! .right )
653+ stack.append (right! .left )
654+ }
655+ return true
656+ }
657+ ```
578658
579659-----------------------
580660<div align =" center " ><img src =https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width =500 > </img ></div >
0 commit comments