Invert Binary Tree

Given the root of a binary tree, invert the tree, and return its root.

 

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

My Solution

Inverting the tree is basically swapping the left and right subtrees for every node. We can do this with a postorder traversal that inverts the left and right subtree recursively and then swapping the current node’s left and right subtrees.

Time complexity would be O(n) since we visit all the nodes once. Space complexity would be O(log n) due to the space consumed by the stack, since we are making recursive calls.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }

        TreeNode left = invertTree(root.left);
        TreeNode right = invertTree(root.right);
        
        root.left = right;
        root.right = left;

        return root;
    }
}
Previous
Previous

Summary Ranges

Next
Next

Contains Duplicate II