DEV Community

Cover image for Today I Learned: Invert Binary Tree
Anzhari Purnomo
Anzhari Purnomo

Posted on

Today I Learned: Invert Binary Tree

Problem Statement

Write a function that takes in a binary tree and inverts it.

Sample Input

tree =      1
          /   \
        2       3
      /   \   /   \
     4    5  6     7
   /   \
  8     9
Enter fullscreen mode Exit fullscreen mode

Sample Result

tree =      1
          /   \
        3       2
      /   \   /   \
     7    6  5     4
                 /   \
                9     8
Enter fullscreen mode Exit fullscreen mode

Code #1

def invert_binary_tree(tree):
    queue = [tree]
    while len(queue) > 0:
        cur_node = queue.pop(0)
        if cur_node is not None: 
            cur_node.left, cur_node.right = cur_node.right, cur_node.left
            queue.append(cur_node.left)
            queue.append(cur_node.right)
    return tree


# This is the class of the input binary tree.
class BinaryTree:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
Enter fullscreen mode Exit fullscreen mode

Notes

  • Invert the root node of the tree first.
  • Invert = swap the left child with the right child.
  • Continue swapping the childs of the subsequent node.
  • Perform breadth-first traversal.
  • Utilize queue to perform the traversal iteratively.

Credits

Top comments (2)

Collapse
 
spachev profile image
Sasha Pachev

Additionally, a recursive solution, tested at leetcode.com/problems/invert-binar...

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
       if (!root)
           return NULL;
       if (root->left)
           invertTree(root->left);
       if (root->right)
           invertTree(root->right);
        TreeNode* tmp = root->right;
        root->right = root->left;
        root->left = tmp;
        return root;
    }
};
Collapse
 
anzhari profile image
Anzhari Purnomo

Thanks for contributing the recursive approach!