Site icon

Check two binary trees are equal or identical or same (DFS & Examples)

Examples to check binary trees are equal or identical

Example 1: Identical or Same binary trees (Fig 1)

Fig 1: Identical binary trees

Example 2: Non-Identical binary trees (Fig 2)

Fig 2: Example of NonIdentical Binary Trees

Algorithm to check binary trees are identical

  1. Check both nodes of both tree1 and tree2
    • If tree1 and tree2 is null,  tree traversal completed successfully.
    • return true
  2. If node of any of tree is null.
    • Trees are not identical, return false .
  3. 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
    • Data is not same
      • Trees are not identical, return false
  4. After above traversal, we will know whether binary trees are identical or equal or same.
  5. 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:

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

 

Exit mobile version