- Given two binary trees, find out whether one binary tree is equal or identical or same to another binary tree.
- Traverse the binary trees using depth first search (DFS) recursive algorithm
- What identical binary tree?
- Composition of binary trees should be same.
- Data nodes of binary trees (at respective position) should be same.
- We have discussed similar problem to check given binary tree is mirror of another binary tree.
Examples to check binary trees are equal or identical
Example 1: Identical or Same binary trees (Fig 1)
- Structure of both the trees is same
- Data nodes of corresponding binary trees are same.
Example 2: Non-Identical binary trees (Fig 2)
- Structure of both the trees is same
- Data nodes of corresponding binary trees are NOT same.
- Node C and Node R has different values.
- Node D and Node S has different values.
Algorithm to check binary trees are identical
- Check both nodes of both tree1 and tree2
- If tree1 and tree2 is null, tree traversal completed successfully.
- return true
- If node of any of tree is null.
- Trees are not identical, return false .
- Compare data of tree1 and tree2
- Data is same for both nodes
- Go through Left subtree and right subtree
- Traverse Left child of binary tree1 and left child of tree2
- Traverse Right child of binary tree1 and right child of tree2
- Go through Left subtree and right subtree
- Data is not same
- Trees are not identical, return false
- Data is same for both nodes
- After above traversal, we will know whether binary trees are identical or equal or same.
- Time Complexity:
- Let tree1 contains p number of nodes & tree2 contains q number of nodes.
- Time Complexity: O(p) where p > q
Program – Check binary tree is identical to another binary tree:
1.) BinaryTreesAreSame class: BinaryTreesAreSame class is responsible for checking binary trees are identical or same or equal using recursive algorithm.
package org.learn.Question; import org.learn.PrepareTree.Node; public class BinaryTreesAreSame { public static boolean isSameBinaryTree(Node tree1, Node tree2) { if (tree1 == null && tree2 == null) { return true; } if (tree1 == null || tree2 == null) { return false; } if (tree1.data != tree2.data) return false; if (false == isSameBinaryTree(tree1.left, tree2.left)) return false; if (false == isSameBinaryTree(tree1.right, tree2.right)) return false; return true; } }
2) App Class:
- We are constructing the Binary Tree in main method.
- We are calling BinaryTreesAreSame.isSameBinaryTree, to check both binary trees are identical or equal or same.
package org.learn.Client; import org.learn.PrepareTree.Node; import org.learn.Question.BinaryTreesAreSame; 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(50); tree2.left = Node.createNode(30); tree2.right = Node.createNode(30); // left sub tree tree2.left.left = Node.createNode(40); tree2.left.right = Node.createNode(10); // right subtree tree2.right.left = Node.createNode(30); tree2.right.right = Node.createNode(60); boolean isSame = BinaryTreesAreSame.isSameBinaryTree(tree1, tree2); if(isSame) { System.out.println("Trees are identical"); } else { System.out.println("Trees are not identical"); } } }
3.) Node Class: Node class representing the nodes of Binary Tree.
package org.learn.PrepareTree; 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 binary trees are same (Fig 1)
Trees are identical
Download Code – Check Binary Trees are Identical or Same