mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
添加 101. 对称二叉树 Swift版本
This commit is contained in:
@ -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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
Reference in New Issue
Block a user