• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to secondary sidebar

GoHired

Interview Questions asked in Google, Microsoft, Amazon

Join WeekEnd Online Batch from 4-April-2020 on How to Crack Coding Interview in Just 10 Weeks : Fees just 20,000 INR

  • Home
  • Best Java Books
  • Algorithm
  • Internship
  • Certificates
  • About Us
  • Contact Us
  • Privacy Policy
  • Array
  • Stack
  • Queue
  • LinkedList
  • DP
  • Strings
  • Tree
  • Mathametical
  • Puzzles
  • Graph

Binary Tree Isomorphic to each other

March 22, 2017 by Dhaval Dave

Find weather two given trees are isomorphic to each other or not.
Lets understand What is isomorphic strings

AAB and XXY are IsoMorphic to each other, consider A replaces/morphs as X and B as Y, then both strings are isomorphic.
ABC and XXY are not IsoMorphic.isomorohic tree

In case of Trees Two binary trees A and B are isomorphic if they have the same shape means the values stored in the nodes do not affect whether two trees are isomorphic. Or its even called Quasi Isomorphic tree
(Mathematically we are discussing IsoMorphic rooted tree and not IsoMorphic Binary Tree, See at  : https://www.slideshare.net/AnasAssayuti/nota-math-discrete-tree Slide 28 onwards

Write a method isIsomorphic that returns true if its two tree are isomorphic and false otherwise.

Here w’ll discuss both ways to find if a tree is isomorphic to each other or not, One is with data and one is without data match

  1.  If ‘A’ Tree is structure wise mirror of other tree ‘B’ ( without its data values)
  2.  If ‘A’ Tree is exactly mirror of other tree ‘B’ (with of its data values

Algorithm for 1.

  • If any of the tree is null
    • Trees are not quasi isomorphic & return false
  • Check both trees tree1 and tree2
    • if tree1 and tree2 are null, traversal completed successfully.
      return true
  • Traverse Left subtree of tree1 and left subtree of tree2
  • Traverse Right subtree of tree1 and right subtree of tree2
    • If structures are identical, then return true
    • If trees are not identical, let us check one tree (or subtree) are mirror of other tree (subtree)
  • Traverse Left subtree of tree1 and right subtree of tree2
  • Traverse Right subtree of tree1 and left subtree of tree2
    • If structures are mirror structure, then return true
    • Else, return false

Sudo Code for 1&2.

bool isomorphic(struct treenode *treeone, struct treenode *treetwo)
{
    //if both tree null
    if (!treeone && !treetwo)
        return true;  
    // if one is null
    if((!treeone  ||  !treetwo))
        return false;
    // in case you want to check Data (case 2)
    if(treeone-data != treetwo->data)
        return false;
    return (
         (isomorphic(treeone->left, treetwo->left) 
          && isomorphic(treeone->right, treetwo->right)) || 
         (isomorphic(treeone->left, treetwo->right) 
          && isomorphic(treeone->right, treetwo->left))
         );
}

Working Code

// A C++ program to check if two given trees are isomorphic by gohired.in
#include <iostream>
using namespace std;

struct node
{
	int data;
	struct node* left;
	struct node* right;
};

bool isIsomorphic(node *treeone, node *treetwo)
{
    if (!treeone && !treetwo)
        return true;  
    if((!treeone  ||  !treetwo))
        return false;
   
        return (
                isIsomorphic(treeone->left, treetwo->right) 
                && isIsomorphic(treeone->right, treetwo->left)
                ||
                isIsomorphic(treeone->left, treetwo->left) 
                && isIsomorphic(treeone->right, treetwo->right) 
            );
}

node* newNode(int data)
{
	node* temp = new node;
	temp->data = data;
	temp->left = NULL;
	temp->right = NULL;

	return (temp);
}
int main()
{
	struct node *n1 = newNode(1);
    n1->left        = newNode(2);
    n1->right       = newNode(3);
    n1->left->left  = newNode(4);
    n1->left->right = newNode(5);
    n1->right->left  = newNode(6);
    n1->left->right->left = newNode(7);
    n1->left->right->right = newNode(8);
 
    struct node *n2 = newNode(1);
    n2->left         = newNode(3);
    n2->right        = newNode(2);
    n2->right->left   = newNode(4);
    n2->right->right   = newNode(5);
    n2->left->right   = newNode(6);
    n2->right->right->left = newNode(8);
    n2->right->right->right = newNode(9);

	if (isIsomorphic(n1, n2) == true)
	cout << "Yes";
	else
	cout << "No";

	return 0;
}

Similar Articles

Filed Under: Amazon Interview Question, Interview Questions, Microsoft Interview Questions, problem Tagged With: Binary Tree, tree

Reader Interactions

Primary Sidebar

Join WeekEnd Online/Offline Batch from 4-April-2020 on How to Crack Coding Interview in Just 10 Weeks : Fees just 20,000 INR

Join WeekEnd Online/Offline Batch from 4-April-2020

WhatsApp us

Secondary Sidebar

Custom Search

  • How I cracked AMAZON
  • LeetCode
  • Adobe
  • Amazon
  • Facebook
  • Microsoft
  • Hacker Earth
  • CSE Interview

Top Rated Questions

Leetcode: Merge Intervals

Test Cases for Round Function

Print vertical sum of all the axis in the given binary tree

Client Server C program

robot standing at first cell of an M*N matrix. It can move only in two directions, right and down. In how many ways, it can reach to the last cell i.e. (M, N) Code it

TicTacToe Game As Asked in Flipkart

Amazon Interview On-Campus For Internship – 1

Check if an array has duplicate numbers in O(n) time and O(1) space

Flipkart SDET Interview Experience

Common Ancestor in a Binary Tree or Binary Search Tree

simple sql injection

Find Percentage of Words matching in Two Strings

Microsoft BING Interview Experience

LeetCode: Container With Most Water

There are N nuts and N bolts, u have to find all the pairs of nuts and bolts in minimum no. of iteration

Leetcode: Edit Distance

Implement LRU Cache

25 horses 5 tracks Find 3 fastest puzzle

How strtok() Works

Advanced SQL Injection

Linked List V/S Binary Search Tree

Max Sum in circularly situated Values

Find if a binary tree is height balanced ?

C++ OOPs Part1

Calculate price of parking from parking start end time prices

Maximum path sum between two leaves

Python List

Given a sorted array and a number x, find the pair in array whose sum is closest to x

ADOBE Aptitude C Language Test

Serialise Deserialise N-ary Tree

Copyright © 2026 · Genesis Framework · WordPress · Log in