--- title: '226. Invert Binary Tree' description: Given the root of a binary tree, invert the tree, and return its root icon: dot topics: - { name: "Tree", slug: "tree" } - { name: "Depth-First Search", slug: "depth-first-search" } - { name: "Breadth-First Search", slug: "breadth-first-search" } - { name: "Binary Tree", slug: "binary-tree" } video: "OnSn2XEQ4MY" issue: "https://github.com/prdlk/leetcode/issues/96" companies: - { name: "Microsoft", period: "Thirty Days", frequency: 57.2 } - { name: "Google", period: "Thirty Days", frequency: 29 } - { name: "Meta", period: "Six Months", frequency: 32.7 } sidebar: label: 'Invert Binary Tree' badge: 'Easy' --- ### Example 1: - Input: `root = [4,2,7,1,3,6,9]` - Output: `[4,7,2,9,6,3,1]` ### Example 2: - Input: `root = [2,1,3]` - Output: `[2,3,1]` ### Example 3: - Input: `root = []` - Output: `[]` ### Constraints: - The number of nodes in the tree is in the range [0, 100]. - `-100 <= Node.val <= 100` ## Approach ```mermaid flowchart TD S(["invertTree(root)"]) --> B{"root is None?"} B -- yes --> Z(["return None"]) B -- no --> L["left = invertTree(root.left), right = invertTree(root.right) — both subtrees are already inverted"] L --> X["root.left = right, root.right = left"] X --> E(["return root"]) ``` ## Solution ```py # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: if not root: return None left = self.invertTree(root.left) right = self.invertTree(root.right) root.left = right root.right = left return root ```