rendered paste bodypublic class exercises
{
public static void printTree(TreeNode root)
{
if(root == null)
return;
System.out.print(root.getValue() + " ");
printTree(root.getLeft());
printTree(root.getRight());
}
public static boolean isLeaf(TreeNode node)
{
return node != null && node.getLeft() == null
&& node.getRight() == null;
}
public static int sumTree(TreeNode root)
{
if(root == null)
return 0;
return ((Integer)root.getValue()).intValue()
+ sumTree(root.getLeft())
+ sumTree(root.getRight());
}
public static int countPaths(TreeNode root)
{
if(root == null)
return 0;
int sum = 0;
if(root.getLeft() != null)
sum += 1 + countPaths(root.getLeft());
if(root.getRight() != null)
sum += 1 + countPaths(root.getRight());
return sum;
}
public static int depth(TreeNode root)
{
if(root == null)
return 0;
return Math.max(1 + depth(root.getLeft()),
1 + depth(root.getRight()));
}
public static int countNodes(TreeNode root)
{
if(root == null)
return 0;
return 1 + countNodes(root.getLeft()) +
countNodes(root.getRight());
}
public static double bushRatio(TreeNode root)
{
if(root == null)
return 0.;
return countNodes(root) /
(Math.pow(2., depth(root)) - 1.);
}
public static TreeNode copy(TreeNode root)
{
if(root == null)
return null;
return new TreeNode(root.getValue(),
copy(root.getLeft()),
copy(root.getRight()));
}
public static TreeNode mirrorImage(TreeNode root)
{
if(root == null)
return null;
return new TreeNode(root.getValue(),
mirrorImage(root.getRight()),
mirrorImage(root.getLeft()));
}
public static boolean sameShape(TreeNode root1,
TreeNode root2)
{
if(root1 == null && root2 == null)
return true;
if((root1 == null && root2 != null) ||
(root1 != null && root2 == null))
return false;
return sameShape(root1.getLeft(), root2.getLeft()) &&
sameShape(root1.getRight(), root2.getRight());
}
public static boolean hasSameSubtree(TreeNode root1,
TreeNode root2)
{
if(root2 == null)
return true;
if(root1 == null)
return false;
if(sameShape(root1,root2))
return true;
return sameShape(root1.getLeft(),root2) ||
sameShape(root1.getRight(),root2);
}
public static void main()
{
TreeNode n6 = new TreeNode(6),
n5 = new TreeNode(5),
n4 = new TreeNode(4),
n3 = new TreeNode(3, n6, null),
n2 = new TreeNode(2, n4, n5),
n1 = new TreeNode(1, n2, n3);
printTree(n1);
System.out.println("\nisLeaf(n5) = " + isLeaf(n5));
System.out.println("isLeaf(n1) = " + isLeaf(n1));
System.out.println("sumTree(n1) = " + sumTree(n1));
System.out.println("countPaths(n1) = " + countPaths(n1));
System.out.println("depth(n1) = " + depth(n1));
System.out.println("countNodes(n1) = " + countNodes(n1));
System.out.println("bushRatio(n1) = " + bushRatio(n1));
System.out.print("copy(n1) = ");
printTree(copy(n1));
System.out.print("\nmirrorImage(n1) = ");
printTree(mirrorImage(n1));
System.out.println("\nsameShape(n1, n1) = " + sameShape(n1, n1));
System.out.println("sameShape(n2, n3) = " + sameShape(n2, n3));
System.out.println("hasSameSubtree(n1, n2) = " + hasSameSubtree(n1, n2));
System.out.println("hasSameSubtree(n2, n3) = " + hasSameSubtree(n2, n3));
}
}