- Given two binary trees, find out one binary tree is Isomorphic of another binary tree.
- Traverse the binary tree using depth first search (DFS) recursive algorithm.
- What is Isomorphic binary tree?
- As per english dictionary, isomorphic is “being of identical or similar form, shape, or structure”.
- If given binary tree have identical or similar form or shape or structure to another binary tree, then trees are isomorphic trees
- The focus point is only structure of trees and we are not concerned about the data of any node.
- We have already discussed similar problems:
- Find two binary trees are equal or identical or same
- Find binary trees are mirror of each other.
- Check binary tree is Quasi-Isomorphic of other binary tree (DFS / Example)
Examples – Check given binary tree is Isomorphic of other binary tree in java
Example 1: check binary trees are Isomorphic shown in Fig 1.
- The structure of both binary trees is same.
- E.g Node B (tree1) and its corresponding Node Q (tree2) have two children. S
- Similarly, we can evaluate the all nodes of binary trees.
Example 2: check binary trees are Isomorphic shown in Fig 2.
- We can see that structure of both binary trees is same.
- Binary trees are isomorphic binary trees.
Example 3: check binary trees are Isomorphic shown in Fig 3.
- The structure of binary trees is not same
- Binary trees are not isomorphic.
Conclusion: If structure (We will ignore data of nodes) of binary trees is same then binary tree are isomorphic.
Algorithm – check binary trees are Isomorphic.
- Check both trees, tree1 and tree2 for null
- if tree1 and tree2 is null
- Successfully complete traversal & return true
- if tree1 and tree2 is null
- If either tree1 or tree2 is null
- Trees are not isomorphic and return false.
- Traverse left & right subtree of current node
- Traverse left subtree of tree1 & left subtree of tree2
- Traverse right subtree of tree1 and right subtree of tree2
- At end of traversal, we will know whether trees are isomorphic.
Program – find if given binary trees are Isomorphic using java
1.) IsomorphicBinaryTree Class:
- IsomorphicBinaryTree class is responsible for finding that binary trees are isomorphic using depth first search (recursive) algorithm.
package org.learn.Question; public class IsomorphicBinaryTree { public static boolean isIsomorphicBinaryTree(Node tree1, Node tree2) { if (tree1 == null && tree2 == null) { return true; } if (tree1 == null || tree2 == null) { return false; } if (false == isIsomorphicBinaryTree(tree1.left, tree2.left)) return false; if (false == isIsomorphicBinaryTree(tree1.right, tree2.right)) return false; return true; } }
2.) App Class:
- We are constructing both binary trees in main method.
- We are calling method of IsomorphicBinaryTree class, to check whether binary trees are isomorphic.
package org.learn.Client; import org.learn.Question.IsomorphicBinaryTree; import org.learn.Question.Node; public class App { public static void main( String[] args ) { Node tree1 = Node.createNode(50); tree1.left = Node.createNode(30); tree1.right = Node.createNode(30); // left sub tree tree1.left.left = Node.createNode(40); tree1.left.right = Node.createNode(10); // right subtree tree1.right.left = Node.createNode(30); tree1.right.right = Node.createNode(60); Node tree2 = Node.createNode(10); tree2.left = Node.createNode(40); tree2.right = Node.createNode(20); // left sub tree tree2.left.left = Node.createNode(50); tree2.left.right = Node.createNode(15); // right subtree tree2.right.left = Node.createNode(70); tree2.right.right = Node.createNode(60); boolean isSame = IsomorphicBinaryTree.isIsomorphicBinaryTree(tree1, tree2); if(isSame) { System.out.println("Binary trees are Isomorphic"); } else { System.out.println("Binary trees are not Isomorphic"); } } }
3.) Node Class :
- Node class is representing the nodes of a binary tree.
package org.learn.Question; public class Node { public int data; public Node left; public Node right; public Node(int num) { this.data = num; this.left = null; this.right = null; } public Node() { this.left = null; this.right = null; } public static Node createNode(int number) { return new Node(number); } }
Output – check given binary trees (Fig 1) are Isomorphic using java
Binary trees are Isomorphic
Download code – isomorphic binary trees in java