mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
0226.翻转二叉树:优化排版,补充Swift版本
# Conflicts: # problems/0226.翻转二叉树.md
This commit is contained in:
@ -47,8 +47,6 @@
|
||||
|
||||
## 递归法
|
||||
|
||||
|
||||
|
||||
对于二叉树的递归法的前中后序遍历,已经在[二叉树:前中后序递归遍历](https://programmercarl.com/二叉树的递归遍历.html)详细讲解了。
|
||||
|
||||
我们下文以前序遍历为例,通过动画来看一下翻转的过程:
|
||||
@ -63,7 +61,7 @@
|
||||
|
||||
返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为`TreeNode*`。
|
||||
|
||||
```
|
||||
```cpp
|
||||
TreeNode* invertTree(TreeNode* root)
|
||||
```
|
||||
|
||||
@ -71,7 +69,7 @@ TreeNode* invertTree(TreeNode* root)
|
||||
|
||||
当前节点为空的时候,就返回
|
||||
|
||||
```
|
||||
```cpp
|
||||
if (root == NULL) return root;
|
||||
```
|
||||
|
||||
@ -79,7 +77,7 @@ if (root == NULL) return root;
|
||||
|
||||
因为是先前序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。
|
||||
|
||||
```
|
||||
```cpp
|
||||
swap(root->left, root->right);
|
||||
invertTree(root->left);
|
||||
invertTree(root->right);
|
||||
@ -257,7 +255,7 @@ public:
|
||||
## 其他语言版本
|
||||
|
||||
|
||||
### Java:
|
||||
### Java
|
||||
|
||||
```Java
|
||||
//DFS递归
|
||||
@ -469,8 +467,6 @@ func invertTree(root *TreeNode) *TreeNode {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### JavaScript
|
||||
|
||||
使用递归版本的前序遍历
|
||||
@ -690,7 +686,7 @@ function invertTree(root: TreeNode | null): TreeNode | null {
|
||||
};
|
||||
```
|
||||
|
||||
### C:
|
||||
### C
|
||||
|
||||
递归法
|
||||
```c
|
||||
@ -775,5 +771,54 @@ func invertTree1(_ root: TreeNode?) -> TreeNode? {
|
||||
}
|
||||
```
|
||||
|
||||
### Swift
|
||||
|
||||
深度优先递归。
|
||||
|
||||
```swift
|
||||
func invertTree(_ root: TreeNode?) -> TreeNode? {
|
||||
guard let node = root else { return root }
|
||||
swap(&node.left, &node.right)
|
||||
_ = invertTree(node.left)
|
||||
_ = invertTree(node.right)
|
||||
return root
|
||||
}
|
||||
```
|
||||
|
||||
深度优先迭代,子结点顺序不重要,从根结点出发深度遍历即可。
|
||||
|
||||
```swift
|
||||
func invertTree(_ root: TreeNode?) -> TreeNode? {
|
||||
guard let node = root else { return root }
|
||||
var stack = [node]
|
||||
while !stack.isEmpty {
|
||||
guard let node = stack.popLast() else { break }
|
||||
swap(&node.left, &node.right)
|
||||
if let node = node.left { stack.append(node) }
|
||||
if let node = node.right { stack.append(node) }
|
||||
}
|
||||
return root
|
||||
}
|
||||
```
|
||||
|
||||
广度优先迭代。
|
||||
|
||||
```swift
|
||||
func invertTree(_ root: TreeNode?) -> TreeNode? {
|
||||
guard let node = root else { return root }
|
||||
var queue = [node]
|
||||
while !queue.isEmpty {
|
||||
let count = queue.count
|
||||
for _ in 0 ..< count {
|
||||
let node = queue.removeFirst()
|
||||
swap(&node.left, &node.right)
|
||||
if let node = node.left { queue.append(node) }
|
||||
if let node = node.right { queue.append(node) }
|
||||
}
|
||||
}
|
||||
return root
|
||||
}
|
||||
```
|
||||
|
||||
-----------------------
|
||||
<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