LeetCode 226. 翻转二叉树

题目描述

226. 翻转二叉树

image-20250418231546073

image-20250418231602606

思路分析

层序遍历

翻转二叉树就是将每个节点的左右子树交换。

参考代码

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
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/56252090
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!