******Check if two binary trees are identical *************
boolean areIdentical(Node root1, Node root2)
{
/* base cases */
if (root1 == null && root2 == null)
return true;
if (root1 == null || root2 == null)
return false;
/* Check if the data of both roots is same and data of left and right
subtrees are also same */
return (root1.data == root2.data
&& areIdentical(root1.left, root2.left)
&& areIdentical(root1.right, root2.right));
}
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
******Check if a BST tree is subtree of another tree*******
/* This function returns true if S is a subtree of T, otherwise false */
boolean isSubtree(Node T, Node S)
{
/* base cases */
if (S == null)
return true;
if (T == null)
return false;
/* Check the tree with root as current node */
if (areIdentical(T, S))
return true;
/* If the tree with root as current node doesn't match then
try left and right subtrees one by one */
return isSubtree(T.left, S)
|| isSubtree(T.right, S);
}
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
******Check if a given Binary Tree is SumTree********
/* A utility function to get the sum of values in tree with root
as root */
int sum(Node node)
{
if (node == null)
return 0;
return sum(node.left) + node.data + sum(node.right);
}
/* returns 1 if sum property holds for the given
node and both of its children */
int isSumTree(Node node)
{
int ls, rs;
/* If node is NULL or it's a leaf node then
return true */
if ((node == null) || (node.left == null && node.right == null))
return 1;
/* Get sum of nodes in left and right subtrees */
ls = sum(node.left);
rs = sum(node.right);
/* if the node and both of its children satisfy the
property return 1 else 0*/
if ((node.data == ls + rs) && (isSumTree(node.left) != 0)
&& (isSumTree(node.right)) != 0)
return 1;
return 0;
}
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
******Level Order Tree Traversal******
/* Given a binary tree. Print its nodes in level order
using array for implementing queue */
void printLevelOrder()
{
Queue<Node> queue = new LinkedList<Node>();
queue.add(root);
while (!queue.isEmpty())
{
/* poll() removes the present head. */
Node tempNode = queue.poll();
System.out.print(tempNode.data + " ");
/*Enqueue left child */
if (tempNode.left != null) {
queue.add(tempNode.left);
}
/*Enqueue right child */
if (tempNode.right != null) {
queue.add(tempNode.right);
}
}
boolean areIdentical(Node root1, Node root2)
{
/* base cases */
if (root1 == null && root2 == null)
return true;
if (root1 == null || root2 == null)
return false;
/* Check if the data of both roots is same and data of left and right
subtrees are also same */
return (root1.data == root2.data
&& areIdentical(root1.left, root2.left)
&& areIdentical(root1.right, root2.right));
}
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
******Check if a BST tree is subtree of another tree*******
/* This function returns true if S is a subtree of T, otherwise false */
boolean isSubtree(Node T, Node S)
{
/* base cases */
if (S == null)
return true;
if (T == null)
return false;
/* Check the tree with root as current node */
if (areIdentical(T, S))
return true;
/* If the tree with root as current node doesn't match then
try left and right subtrees one by one */
return isSubtree(T.left, S)
|| isSubtree(T.right, S);
}
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
******Check if a given Binary Tree is SumTree********
/* A utility function to get the sum of values in tree with root
as root */
int sum(Node node)
{
if (node == null)
return 0;
return sum(node.left) + node.data + sum(node.right);
}
/* returns 1 if sum property holds for the given
node and both of its children */
int isSumTree(Node node)
{
int ls, rs;
/* If node is NULL or it's a leaf node then
return true */
if ((node == null) || (node.left == null && node.right == null))
return 1;
/* Get sum of nodes in left and right subtrees */
ls = sum(node.left);
rs = sum(node.right);
/* if the node and both of its children satisfy the
property return 1 else 0*/
if ((node.data == ls + rs) && (isSumTree(node.left) != 0)
&& (isSumTree(node.right)) != 0)
return 1;
return 0;
}
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
******Level Order Tree Traversal******
/* Given a binary tree. Print its nodes in level order
using array for implementing queue */
void printLevelOrder()
{
Queue<Node> queue = new LinkedList<Node>();
queue.add(root);
while (!queue.isEmpty())
{
/* poll() removes the present head. */
Node tempNode = queue.poll();
System.out.print(tempNode.data + " ");
/*Enqueue left child */
if (tempNode.left != null) {
queue.add(tempNode.left);
}
/*Enqueue right child */
if (tempNode.right != null) {
queue.add(tempNode.right);
}
}