# Check if Two Trees are Identitical

Given root nodes of 2 trees and we need to find that whether the trees are identical or not.
Trees being identical means that they are same in terms of structures, same in terms of the number of nodes and also same in terms of links.

The Algorithm for problem is –

1. Check whether the data of root nodes of both are same or not.
2. Do this recursively for left subtree and right subtree.
3. Check for corner cases, like when one of the node is absent in the trees ans so on.
The Code is -
```class Node
{
int data;
Node left, right;

Node(int item)
{
data = item;
left = right = null;
}
}
class BTree
{
Node root1, root2, root3;
boolean isIdentical(Node root1, Node root2)
{
//Null Node
if(root1 == null && root2 == null){
return true;
}
// Cases where One node is null and the other is not.
if(root1 == null && root2 !=null)
return false;
if(root1 !=null && root2 == null)
return false;
if(root1.data != root2.data)
return false;

//Do this recursively for Left and right tree.
return (isIdentical(root1.left, root2.left) && isIdentical(root1.right,root2.right));
}
public static void main(String[] args)
{
BTree tree = new BTree();

tree.root1 = new Node(1);
tree.root1.left = new Node(2);
tree.root1.right = new Node(3);
tree.root1.left.left = new Node(4);
tree.root1.left.right = new Node(5);

tree.root2 = new Node(1);
tree.root2.left = new Node(2);
tree.root2.right = new Node(3);
tree.root2.left.left = new Node(4);
tree.root2.left.right = new Node(5);

tree.root3 = new Node(1);
tree.root3.left = new Node(2);
tree.root3.right = new Node(3);
tree.root3.left.left = new Node(10);
tree.root3.left.right = new Node(11);

if (tree.isIdentical(tree.root1, tree.root2))
System.out.println("Both trees are identical");
else
System.out.println("Trees are not identical");

if (tree.isIdentical(tree.root3, tree.root2))
System.out.println("Both trees are identical");
else
System.out.println("Trees are not identical");

}
}

```