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

***JAVA*** Specify, design, and implement a class for binary trees where the nod

ID: 3572451 • Letter: #

Question

***JAVA*** Specify, design, and implement a class for binary trees where the node’s element are stored in an array, similar to the way that a complete binary tree is usually stored. However, these binary trees do not need to be complete. Instead, you should have a second private instance variable that is an array of boolean values called isPresent. The isPresent array indicates which nodes actually exist in the tress. For example, if the tree has a root node, then isPresent[0] is true. If the root has a left child, then isPresent[1] is true. If the root node has a right child, then isPresent[2] is true, and so on. The class should have methods to create the first node and to move a cursor around the tree. After the first node, new nodes may be added only as children of the cursor.

Explanation / Answer

import java.util.Scanner;

class BSTNode

{

     BSTNode left, right;

     int data;

     public BSTNode()

     {

         left = null;

         right = null;

         data = 0;

     }

     public BSTNode(int n)

     {

         left = null;

         right = null;

         data = n;

     }

     public void setLeft(BSTNode n)

     {

         left = n;

     }

     public void setRight(BSTNode n)

     {

         right = n;

     }

     public BSTNode getLeft()

     {

         return left;

     }

     public BSTNode getRight()

     {

         return right;

     }

     public void setData(int d)

     {

         data = d;

     }

     public int getData()

     {

         return data;

     }    

}

class BST

{

     private BSTNode root;

     public BST()

     {

         root = null;

     }

     public boolean isEmpty()

     {

         return root == null;

     }

     public void insert(int data)

     {

         root = insert(root, data);

     }

     private BSTNode insert(BSTNode node, int data)

     {

         if (node == null)

             node = new BSTNode(data);

         else

         {

             if (data <= node.getData())

                 node.left = insert(node.left, data);

             else

                 node.right = insert(node.right, data);

         }

         return node;

     }

     public void delete(int 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");

         }

     }

     private BSTNode delete(BSTNode root, int k)

     {

         BSTNode p, p2, n;

         if (root.getData() == k)

         {

             BSTNode 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;

     }

     public int countNodes()

     {

         return countNodes(root);

     }

     private int countNodes(BSTNode r)

     {

         if (r == null)

             return 0;

         else

         {

             int l = 1;

             l += countNodes(r.getLeft());

             l += countNodes(r.getRight());

             return l;

         }

     }

     public boolean search(int val)

     {

         return search(root, val);

     }

     private boolean search(BSTNode r, int val)

     {

         boolean found = false;

         while ((r != null) && !found)

         {

             int 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;

     }

     public void inorder()

     {

         inorder(root);

     }

     private void inorder(BSTNode r)

     {

         if (r != null)

         {

             inorder(r.getLeft());

             System.out.print(r.getData() +" ");

             inorder(r.getRight());

         }

     }

     public void preorder()

     {

         preorder(root);

     }

     private void preorder(BSTNode r)

     {

         if (r != null)

         {

             System.out.print(r.getData() +" ");

             preorder(r.getLeft());            

             preorder(r.getRight());

         }

     }

     public void postorder()

     {

         postorder(root);

     }

     private void postorder(BSTNode r)

     {

         if (r != null)

         {

             postorder(r.getLeft());            

             postorder(r.getRight());

             System.out.print(r.getData() +" ");

         }

     }    

}

public class BinarySearchTree

{

     public static void main(String[] args)

    {                

        Scanner scan = new Scanner(System.in);

        BST bst = new BST();

        System.out.println("Binary Search Tree Test ");         

        char ch;

        do   

        {

            System.out.println(" Binary Search Tree Operations ");

            System.out.println("1. insert ");

            System.out.println("2. delete");

            System.out.println("3. search");

            System.out.println("4. count nodes");

            System.out.println("5. check empty");

            int choice = scan.nextInt();           

          switch (choice)

            {

            case 1 :

                System.out.println("Enter integer element to insert");

                bst.insert( scan.nextInt() );                    

                break;                         

            case 2 :

                System.out.println("Enter integer element to delete");

                bst.delete( scan.nextInt() );                    

                break;                        

            case 3 :

                System.out.println("Enter integer element to search");

                System.out.println("Search result : "+ bst.search( scan.nextInt() ));

                break;                                         

            case 4 :

                System.out.println("Nodes = "+ bst.countNodes());

                break;    

            case 5 :

                System.out.println("Empty status = "+ bst.isEmpty());

                break;           

            default :

                System.out.println("Wrong Entry ");

                break;  

            }

            System.out.print(" Post order : ");

            bst.postorder();

            System.out.print(" Pre order : ");

            bst.preorder();

            System.out.print(" In order : ");

            bst.inorder();

            System.out.println(" Do you want to continue (Type y or n) ");

            ch = scan.next().charAt(0);                       

        } while (ch == 'Y'|| ch == 'y');              

    }

}