Foldable Binary Trees

Given a binary tree, find out if the tree can be folded or not.

A tree can be folded if left and right subtrees of the tree are structure wise mirror image of each other. An empty tree is considered as foldable.

Consider the below trees:
(a) and (b) can be folded.
(c) and (d) cannot be folded.

(a)
       10
     /    \
    7      15
     \    /
      9  11

(b)
        10
       /  \
      7    15
     /      \
    9       11

(c)
        10
       /  \
      7   15
     /    /
    5   11

(d)

         10
       /   \
      7     15
    /  \    /
   9   10  12
class Tree {
    boolean isFoldableHelper(Node node1, Node node2) {
        if (node1 == null && node2 == null)
            return true;
        else if (node1 == null || node2 == null)
            return false;
        return isFoldableHelper(node1.left, node2.right) && isFoldableHelper(node1.right, node2.left);
    }

    boolean IsFoldable(Node root) {
        if (root == null)
            return true;
        return isFoldableHelper(root.left, root.right);
    }
}

Last updated