题目链接:https://leetcode.cn/problems/invert-binary-tree/description/

1.问题理解

题目要求翻转一棵二叉树,即将每个节点的左子树和右子树交换位置。
简单理解:把树的每个节点的左右孩子都交换一下。

2.核心算法:递归+前序遍历,后序遍历也可以

  • 如果当前节点为空,直接返回 None(递归终止条件)。

  • 交换当前节点的左右子树。

  • 对左右子树递归调用同样的操作。

  • 返回当前节点。

3.关键点和边界条件

1.关键点

交换左右子树的操作要在每个节点上执行一次

递归函数最终必须返回当前节点,这样才能正确连接整棵树。

2.边界条件

root为空,直接返回None

只有一个节点的树,翻转后还是自己

from collections import deque
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        
        queue = collections.deque([root]) #首先加入根节点
        result = []
        while queue:
            level = []
            for _ in range(len(queue)):
                cur = queue.popleft() #队头弹出
                level.append(cur.val)
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
            result.append(level)
        return result