Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

JAVA JAVA JAVA OUTPUT SHOWN PLEASE PLEASE SUBMIT BEFORE MIDNIGHT EST Write a pro

ID: 3681710 • Letter: J

Question

JAVA JAVA JAVA

OUTPUT SHOWN PLEASE

PLEASE SUBMIT BEFORE MIDNIGHT EST

Write a program which creates a binary search tree of different shapes from a file.

·     The comparison is based on the shape’s area

·     There are 3 shapes

o Rectangle

o Circle

o Right Triangle

·     The file is tab delimited format goes as follows

o Rectangle side 1 side 2

o Circle radius

o Right Triangle side 1 side 2

·     The binary search tree needs to have the following methods

o insert: inserts a new shape into the tree

o delete: deletes the shape instance. Keep in mind that in order for a shape to be equal it must have the same same type and area, but the sides can be interchangeable.

o print pre-order traversal: Print the data. Next explore the left subtree. Finally right explore subtree.

o print in-order traversal: Explore the left subtree. Print the data. Finally explore the right subtree.

o print post-order traversal: Explore the left subtree. Then explore the right subtree. Finally print out the data.

o max area: return the maximum area in the tree. Use the properties of the tree to make it efficient.

o delete areas greater than value: For a given value all shapes with an area that’s strictly greater than those values should be deleted. Use the principle of a binary search tree to help make it efficient.

·     Finally write a test file that demonstrates THE POWER OF TREES!!! SHAPES!!! By reading a shape file.

SHAPE FILE:

HINTS:

Inheritance and polymorphism makes this problem not so difficult, so interfaces and base classes are a good idea.

Yes there will be many different class files.

Recursion is your friend.

Example of Results:

Welcome to the shape tree tester!

Reading from file

Rectangle    5   4

Circle   4  

Right Triangle   3   2

Rectangle    2   7

Circle   8  

Right Triangle   5   6

Rectangle    9   2

Circle   2  

Rectangle    5   5

Right Triangle   9   9

Circle   7  

Not properly formatted line. Yes you should check for these. Not intentionally causing a kerfuffle

Rectangle    3   8

Circle   9  

Right Triangle   2   2

Printing pre-order

Rectangle Side 1: 5.0 Side 2: 4.0 Area: 20.0

Right Triangle Side 1: 3.0 Side 2: 2.0 Area: 3.0

Right Triangle Side 1: 2.0 Side 2: 2.0 Area: 2.0

Rectangle Side 1: 2.0 Side 2: 7.0 Area: 14.0

Circle Radius: 2.0 Area: 12.566370614359172

Right Triangle Side 1: 5.0 Side 2: 6.0 Area: 15.0

Rectangle Side 1: 9.0 Side 2: 2.0 Area: 18.0

Circle Radius: 4.0 Area: 50.26548245743669

Rectangle Side 1: 5.0 Side 2: 5.0 Area: 25.0

Rectangle Side 1: 3.0 Side 2: 8.0 Area: 24.0

Right Triangle Side 1: 9.0 Side 2: 9.0 Area: 40.5

Circle Radius: 8.0 Area: 201.06192982974676

Circle Radius: 7.0 Area: 153.93804002589985

Circle Radius: 9.0 Area: 254.46900494077323

Printing in-order

Right Triangle Side 1: 2.0 Side 2: 2.0 Area: 2.0

Right Triangle Side 1: 3.0 Side 2: 2.0 Area: 3.0

Circle Radius: 2.0 Area: 12.566370614359172

Rectangle Side 1: 2.0 Side 2: 7.0 Area: 14.0

Right Triangle Side 1: 5.0 Side 2: 6.0 Area: 15.0

Rectangle Side 1: 9.0 Side 2: 2.0 Area: 18.0

Rectangle Side 1: 5.0 Side 2: 4.0 Area: 20.0

Rectangle Side 1: 3.0 Side 2: 8.0 Area: 24.0

Rectangle Side 1: 5.0 Side 2: 5.0 Area: 25.0

Right Triangle Side 1: 9.0 Side 2: 9.0 Area: 40.5

Circle Radius: 4.0 Area: 50.26548245743669

Circle Radius: 7.0 Area: 153.93804002589985

Circle Radius: 8.0 Area: 201.06192982974676

Circle Radius: 9.0 Area: 254.46900494077323

Printing post-order

Right Triangle Side 1: 2.0 Side 2: 2.0 Area: 2.0

Circle Radius: 2.0 Area: 12.566370614359172

Rectangle Side 1: 9.0 Side 2: 2.0 Area: 18.0

Right Triangle Side 1: 5.0 Side 2: 6.0 Area: 15.0

Rectangle Side 1: 2.0 Side 2: 7.0 Area: 14.0

Right Triangle Side 1: 3.0 Side 2: 2.0 Area: 3.0

Rectangle Side 1: 3.0 Side 2: 8.0 Area: 24.0

Right Triangle Side 1: 9.0 Side 2: 9.0 Area: 40.5

Rectangle Side 1: 5.0 Side 2: 5.0 Area: 25.0

Circle Radius: 7.0 Area: 153.93804002589985

Circle Radius: 9.0 Area: 254.46900494077323

Circle Radius: 8.0 Area: 201.06192982974676

Circle Radius: 4.0 Area: 50.26548245743669

Rectangle Side 1: 5.0 Side 2: 4.0 Area: 20.0

The max area is: 254.46900494077323

Deleting Rectangle Side 1: 2.0 Side 2: 7.0 Area: 14.0

Printing in-order

Right Triangle Side 1: 2.0 Side 2: 2.0 Area: 2.0

Right Triangle Side 1: 3.0 Side 2: 2.0 Area: 3.0

Circle Radius: 2.0 Area: 12.566370614359172

Right Triangle Side 1: 5.0 Side 2: 6.0 Area: 15.0

Rectangle Side 1: 9.0 Side 2: 2.0 Area: 18.0

Rectangle Side 1: 5.0 Side 2: 4.0 Area: 20.0

Rectangle Side 1: 3.0 Side 2: 8.0 Area: 24.0

Rectangle Side 1: 5.0 Side 2: 5.0 Area: 25.0

Right Triangle Side 1: 9.0 Side 2: 9.0 Area: 40.5

Circle Radius: 4.0 Area: 50.26548245743669

Circle Radius: 7.0 Area: 153.93804002589985

Circle Radius: 8.0 Area: 201.06192982974676

Circle Radius: 9.0 Area: 254.46900494077323

Deleting values larger than 30

Printing in order

Right Triangle Side 1: 2.0 Side 2: 2.0 Area: 2.0

Right Triangle Side 1: 3.0 Side 2: 2.0 Area: 3.0

Circle Radius: 2.0 Area: 12.566370614359172

Right Triangle Side 1: 5.0 Side 2: 6.0 Area: 15.0

Rectangle Side 1: 9.0 Side 2: 2.0 Area: 18.0

Rectangle Side 1: 5.0 Side 2: 4.0 Area: 20.0

Rectangle Side 1: 3.0 Side 2: 8.0 Area: 24.0

Rectangle Side 1: 5.0 Side 2: 5.0 Area: 25.0

Explanation / Answer

import java.util.Scanner;
import java.io.*;

/* Class Node */
class Node
{
Node left, right;
double data;

/* Constructor */
public Node()
{
left = null;
right = null;
data = 0;
}
/* Constructor */
public Node(double n)
{
left = null;
right = null;
data = n;
}
/* Function to set left node */
public void setLeft(Node n)
{
left = n;
}
/* Function to set right node */
public void setRight(Node n)
{
right = n;
}
/* Function to get left node */
public Node getLeft()
{
return left;
}
/* Function to get right node */
public Node getRight()
{
return right;
}
/* Function to set data to node */
public void setData(double d)
{
data = d;
}
/* Function to get data from node */
public double getData()
{
return data;
}   
}

/* Class BST */
class BST
{
   public Node root;

/* Constructor */
public BST()
{
root = null;
}
        double max = 0.0;
/* Function to check if tree is empty */
public boolean isEmpty()
{
return root == null;
}
/* Functions to insert data */
public void insert(double data)
{
root = insert(root, data);
}
/* Function to insert data recursively */
public Node insert(Node node, double data)
{
if (node == null)
node = new Node(data);
else
{
if (data <= node.getData())
node.left = insert(node.left, data);
else
node.right = insert(node.right, data);
}
return node;
}
/* Functions to delete data */
public void delete(double k)
{
if (isEmpty())
System.out.println("Tree Empty");
else if (search(k) == false)
System.out.println("Sorry "+ k +" is not present");
else
{
root = delete(root, k);
System.out.println(k+ " deleted from the tree");
}
}
public Node delete(Node root, double k)
{
Node p, p2, n;
if (root.getData() == k)
{
Node lt, rt;
lt = root.getLeft();
rt = root.getRight();
if (lt == null && rt == null)
return null;
else if (lt == null)
{
p = rt;
return p;
}
else if (rt == null)
{
p = lt;
return p;
}
else
{
p2 = rt;
p = rt;
while (p.getLeft() != null)
p = p.getLeft();
p.setLeft(lt);
return p2;
}
}
if (k < root.getData())
{
n = delete(root.getLeft(), k);
root.setLeft(n);
}
else
{
n = delete(root.getRight(), k);
root.setRight(n);   
}
return root;
}
     
     
/* Functions to search for an element */
public boolean search(double val)
{
return search(root, val);
}
/* Function to search for an element recursively */
public boolean search(Node r, double val)
{
boolean found = false;
while ((r != null) && !found)
{
double rval = r.getData();
if (val < rval)
r = r.getLeft();
else if (val > rval)
r = r.getRight();
else
{
found = true;
break;
}
found = search(r, val);
}
return found;
}
     
/* Function for inorder traversal */
public void inorder()
{
inorder(root);
}
public void inorder(Node r)
{
if (r != null)
{
inorder(r.getLeft());
System.out.print(r.getData() +" ");
inorder(r.getRight());
}
}
/* Function for preorder traversal */
public void preorder()
{
preorder(root);
}
public void preorder(Node r)
{
if (r != null)
{
System.out.print(r.getData() +" ");
preorder(r.getLeft());   
preorder(r.getRight());
}
}
/* Function for postorder traversal */
public void postorder()
{
postorder(root);
}
public void postorder(Node r)
{
if (r != null)
{
postorder(r.getLeft());   
postorder(r.getRight());
System.out.print(r.getData() +" ");
}
}   
     
       public static double tri_area(String side1, String side2)
           {
               return (0.5)*(Integer.parseInt(side1))*(Integer.parseInt(side2));
           }

       public static double rect_area(String side1, String side2)
           {
               return (Integer.parseInt(side1))*(Integer.parseInt(side2));
           }

       public static double cir_area(String side1)
           {
               return (22/7)*Math.pow(Integer.parseInt(side1), 2);
           }
                 
}

public class BinarySearchTree
{
public static void main(String[] args) throws Exception
{   
Scanner s = new Scanner(System.in);
BST bst = new BST();
char ch;
do
{
System.out.println(" Binary Search Tree Operations ");
System.out.println("1. insert ");
System.out.println("2. delete");
System.out.println("3. pre order");
System.out.println("4. in order");
System.out.println("5. post order");
System.out.println("6. Max Area");   
           
int c = s.nextInt();
switch (c)
{
case 1 :
                   String x[];  
                   FileInputStream fis = new FileInputStream("inp.txt");

                   BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                   
                   String line = null;
                   while ((line = br.readLine()) != null)
                       {
                           x = line.split(" ");
                           if(x[0].equals("RightTriangle"))
                               {
                                   double area = bst.tri_area(x[1],x[2]);
                                   bst.insert(area);
                                   if(area > bst.max)
                                       bst.max = area;
                               }
                           else if(x[0].equals("Rectangle"))
                               {
                                   double area = bst.rect_area(x[1],x[2]);
                                   bst.insert(area);
                                   if(area > bst.max)
                                       bst.max = area;
                               }                          
                           else if(x[0].equals("Circle"))
                               {
                                   double area = bst.cir_area(x[1]);
                                   bst.insert(area);
                                   if(area > bst.max)
                                       bst.max = area;
                               }
                       }
          
  
break;
case 2 :
System.out.println("Enter integer element to delete");
               double aa1 = s.nextInt();
bst.delete(aa1);   
break;   
case 3 :
       bst.preorder();
   break;
case 4 :
bst.inorder();
               break;   
case 5 :
       bst.postorder();
           break;
                  
case 6 :
       System.out.println("MAX AREA IN TREE : " + bst.max);
           break;                  
                  
default :
System.out.println("Enter Given Choices ");
break;   
}

System.out.println(" Do you want to continue (Type y or n) ");
ch = s.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');   
}
}