LeetCode 226. 翻转二叉树
题目描述
思路分析
层序遍历
翻转二叉树就是将每个节点的左右子树交换。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
// 交换左右子树
root.Left, root.Right = root.Right, root.Left
// 递归翻转左右子树
invertTree(root.Left)
invertTree(root.Right)
return root
}
1
2
3
4
5
6
7
8
9
10
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
// 递归翻转左右子树
root.Left, root.Right = invertTree(root.Right), invertTree(root.Left)
return root
}
- 时间复杂度:O(n),其中 n 是二叉树的节点数。
- 空间复杂度:O(h),其中 h 是二叉树的高度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
var queue []*TreeNode
queue = append(queue, root)
for len(queue) > 0 {
node := queue[0]
queue = queue[1:]
// 交换左右子树
node.Left, node.Right = node.Right, node.Left
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
return root
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用