• 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

Fibonacci Hashing & Fastest Hashtable

SAP Hiring Off-Campus General Aptitude

Amazon Interview On-Campus For Internship – 1

Word Break Problem

Find the number ABCD such that when multipled by 4 gives DCBA.

Reliance Jio Software Developer Interview Experience

Common Ancestor in a Binary Tree or Binary Search Tree

Puzzle : 100 doors in a row Visit and Toggle the door. What state the door will be after nth pass ?

SAP Off Campus Hiring_ March 2015 Sample Questions

Check Binary Tree is Binary Search Tree or not

Find min element in Sorted Rotated Array (With Duplicates)

Rectangular chocolate bar Create at least one piece which consists of exactly nTiles tiles

Daughter’s Age VeryGood Puzzle

Closed Parentheses checker

Urban Ladder Written Test.

Find the kth number with prime factors 3, 5 and 7

Get K Max and Delete K Max in stream of incoming integers

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

flattens 2 D linked list to a single sorted link list

Leetcode: Merge Intervals

Find an index i such that Arr [i] = i in array of n distinct integers sorted in ascending order.

C Program for TAIL command of UNIX

Handle duplicates in Binary Search Tree

LeetCode: Binary Tree Maximum Path Sum

How strtok() Works

TicTacToe Game As Asked in Flipkart

Memory Efficient LinkedList

Convert Decimal to Roman numbers / Romanizer HackerEarth Code

Find min element in Sorted Rotated Array (Without Duplicates)

Amazon Interview Experience – SDE Chennai

Copyright © 2026 · Genesis Framework · WordPress · Log in