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

i gotta modify the code using below options ====================================

ID: 3551865 • Letter: I

Question

 i gotta modify the code using below options 
 ================================================= 
 
 Write a program to implement Huffman coding and decoding (see pages 415-421) in Java.  The program's input will be a command line file that can contain any char, but the  only ones of interest in this assignment are the capital letters A through G. A COMMAND LINE FILE IS JUST THAT: A FILE NAME THAT IS ENTERED ON THE COMMAND LINE (you will use jGrasp with build/run args) PRIOR TO RUNNING THE PROGRAM.  IF the file happens to contain chars other than A through G IGNORE THEM in a-d. Spaces should be ignored , for example , as should other chars!  I want you to display (all answers MUST  go to  the console) using a menu system (from the console OR from a window) :    a.  The Huffman tree (see page 405 and 418 )itself (you may use the code from Tree.java if you wish.)       You may assume that the tree will turn out to be no deeper than the tree shown on page 405.       You may also assume that no individual char appears more than 10 times.       The Huffman tree can be constructed using a priority queue.    b.  the code table that displays the encoding for each of the chars A through G (see page        416-417.) EXERCISE  OPTION a BEFORE  b.     c.  the binary encoding of the portion of the file       that only contains the chars A through G (after each eight bits leave a space and print only 3 bytes per line.)       The binary encoding may not necessarily display a "full" byte at the end (see page 417.) c SHOULD BE EXERCISED       AFTER b.    d.  the A-G portion of the original file that is calculated by using the HUFFMAN TREE  from      part a and the binary encoding from part c (don't just print the file back from the original; you      must use the HUFFMAN TREE to do this.)  So you want to "read" the binary encoding from part c (using the       HUFFMAN TREE from part a to reconstruct the portion of the file that consists of A through G.)  BASICALLY      YOU ARE DEOCODING THE PORTION OF THE FILE THAT CONSISTS OF THE CHARS A-G.  AS YOU READ THE ENCODED FILE      YOU ARE  MARCHING DOWN THE HUFFMAN TREE--WHEN YOU REACH A LEAF, YOU CAN FIGURE OUT WHICH CHAR IT IS AND      YOU PRINT THAT CHAR.  
 =================================================================================================== 
 // tree.java // demonstrates binary tree // to run this program: C>java TreeApp import java.io.*; import java.util.*;               // for Stack class //////////////////////////////////////////////////////////////// class Node    {    public int iData;              // data item (key)    public double dData;           // data item    public Node leftChild;         // this node's left child    public Node rightChild;        // this node's right child     public void displayNode()      // display ourself       {       System.out.print('{');       System.out.print(iData);       System.out.print(", ");       System.out.print(dData);       System.out.print("} ");       }    }  // end class Node //////////////////////////////////////////////////////////////// class Tree    {    private Node root;             // first node of tree  // -------------------------------------------------------------    public Tree()                  // constructor       { root = null; }            // no nodes in tree yet // -------------------------------------------------------------    public Node find(int key)      // find node with given key       {                           // (assumes non-empty tree)       Node current = root;               // start at root       while(current.iData != key)        // while no match,          {          if(key < current.iData)         // go left?             current = current.leftChild;          else                            // or go right?             current = current.rightChild;          if(current == null)             // if no child,             return null;                 // didn't find it          }       return current;                    // found it       }  // end find() // -------------------------------------------------------------    public void insert(int id, double dd)       {       Node newNode = new Node();    // make new node       newNode.iData = id;           // insert data       newNode.dData = dd;       if(root==null)                // no node in root          root = newNode;       else                          // root occupied          {          Node current = root;       // start at root          Node parent;          while(true)                // (exits internally)             {             parent = current;             if(id < current.iData)  // go left?                {                current = current.leftChild;                if(current == null)  // if end of the line,                   {                 // insert on left                   parent.leftChild = newNode;                   return;                   }                }  // end if go left             else                    // or go right?                {                current = current.rightChild;                if(current == null)  // if end of the line                   {                 // insert on right                   parent.rightChild = newNode;                   return;                   }                }  // end else go right             }  // end while          }  // end else not root       }  // end insert() // -------------------------------------------------------------    public boolean delete(int key) // delete node with given key       {                           // (assumes non-empty list)       Node current = root;       Node parent = root;       boolean isLeftChild = true;        while(current.iData != key)        // search for node          {          parent = current;          if(key < current.iData)         // go left?             {             isLeftChild = true;             current = current.leftChild;             }          else                            // or go right?             {             isLeftChild = false;             current = current.rightChild;             }          if(current == null)             // end of the line,             return false;                // didn't find it          }  // end while       // found node to delete        // if no children, simply delete it       if(current.leftChild==null &&                                    current.rightChild==null)          {          if(current == root)             // if root,             root = null;                 // tree is empty          else if(isLeftChild)             parent.leftChild = null;     // disconnect          else                            // from parent             parent.rightChild = null;          }        // if no right child, replace with left subtree       else if(current.rightChild==null)          if(current == root)             root = current.leftChild;          else if(isLeftChild)             parent.leftChild = current.leftChild;          else             parent.rightChild = current.leftChild;        // if no left child, replace with right subtree       else if(current.leftChild==null)          if(current == root)             root = current.rightChild;          else if(isLeftChild)             parent.leftChild = current.rightChild;          else             parent.rightChild = current.rightChild;        else  // two children, so replace with inorder successor          {          // get successor of node to delete (current)          Node successor = getSuccessor(current);           // connect parent of current to successor instead          if(current == root)             root = successor;          else if(isLeftChild)             parent.leftChild = successor;          else             parent.rightChild = successor;           // connect successor to current's left child          successor.leftChild = current.leftChild;          }  // end else two children       // (successor cannot have a left child)       return true;                                // success       }  // end delete() // -------------------------------------------------------------    // returns node with next-highest value after delNode    // goes to right child, then right child's left descendents    private Node getSuccessor(Node delNode)       {       Node successorParent = delNode;       Node successor = delNode;       Node current = delNode.rightChild;   // go to right child       while(current != null)               // until no more          {                                 // left children,          successorParent = successor;          successor = current;          current = current.leftChild;      // go to left child          }                                            // if successor not       if(successor != delNode.rightChild)  // right child,          {                                 // make connections          successorParent.leftChild = successor.rightChild;          successor.rightChild = delNode.rightChild;          }       return successor;       } // -------------------------------------------------------------    public void traverse(int traverseType)       {       switch(traverseType)          {          case 1: System.out.print(" Preorder traversal: ");                  preOrder(root);                  break;          case 2: System.out.print(" Inorder traversal:  ");                  inOrder(root);                  break;          case 3: System.out.print(" Postorder traversal: ");                  postOrder(root);                  break;          }       System.out.println();       } // -------------------------------------------------------------    private void preOrder(Node localRoot)       {       if(localRoot != null)          {          System.out.print(localRoot.iData + " ");          preOrder(localRoot.leftChild);          preOrder(localRoot.rightChild);          }       } // -------------------------------------------------------------    private void inOrder(Node localRoot)       {       if(localRoot != null)          {          inOrder(localRoot.leftChild);          System.out.print(localRoot.iData + " ");          inOrder(localRoot.rightChild);          }       } // -------------------------------------------------------------    private void postOrder(Node localRoot)       {       if(localRoot != null)          {          postOrder(localRoot.leftChild);          postOrder(localRoot.rightChild);          System.out.print(localRoot.iData + " ");          }       } // -------------------------------------------------------------    public void displayTree()       {       Stack globalStack = new Stack();       globalStack.push(root);       int nBlanks = 32;       boolean isRowEmpty = false;       System.out.println(       "......................................................");       while(isRowEmpty==false)          {          Stack localStack = new Stack();          isRowEmpty = true;           for(int j=0; j<nBlanks; j++)             System.out.print(' ');           while(globalStack.isEmpty()==false)             {             Node temp = (Node)globalStack.pop();             if(temp != null)                {                System.out.print(temp.iData);                localStack.push(temp.leftChild);                localStack.push(temp.rightChild);                 if(temp.leftChild != null ||                                    temp.rightChild != null)                   isRowEmpty = false;                }             else                {                System.out.print("--");                localStack.push(null);                localStack.push(null);                }             for(int j=0; j<nBlanks*2-2; j++)                System.out.print(' ');             }  // end while globalStack not empty          System.out.println();          nBlanks /= 2;          while(localStack.isEmpty()==false)             globalStack.push( localStack.pop() );          }  // end while isRowEmpty is false       System.out.println(       "......................................................");       }  // end displayTree() // -------------------------------------------------------------    }  // end class Tree //////////////////////////////////////////////////////////////// class TreeApp    {    public static void main(String[] args) throws IOException       {       int value;       Tree theTree = new Tree();        theTree.insert(50, 1.5);       theTree.insert(25, 1.2);       theTree.insert(75, 1.7);       theTree.insert(12, 1.5);       theTree.insert(37, 1.2);       theTree.insert(43, 1.7);       theTree.insert(30, 1.5);       theTree.insert(33, 1.2);       theTree.insert(87, 1.7);       theTree.insert(93, 1.5);       theTree.insert(97, 1.5);        while(true)          {          System.out.print("Enter first letter of show, ");          System.out.print("insert, find, delete, or traverse: ");          int choice = getChar();          switch(choice)             {             case 's':                theTree.displayTree();                break;             case 'i':                System.out.print("Enter value to insert: ");                value = getInt();                theTree.insert(value, value + 0.9);                break;             case 'f':                System.out.print("Enter value to find: ");                value = getInt();                Node found = theTree.find(value);                if(found != null)                   {                   System.out.print("Found: ");                   found.displayNode();                   System.out.print(" ");                   }                else                   System.out.print("Could not find ");                   System.out.print(value + ' ');                break;             case 'd':                System.out.print("Enter value to delete: ");                value = getInt();                boolean didDelete = theTree.delete(value);                if(didDelete)                   System.out.print("Deleted " + value + ' ');                else                   System.out.print("Could not delete ");                   System.out.print(value + ' ');                break;             case 't':                System.out.print("Enter type 1, 2 or 3: ");                value = getInt();                theTree.traverse(value);                break;             default:                System.out.print("Invalid entry ");             }  // end switch          }  // end while       }  // end main() // -------------------------------------------------------------    public static String getString() throws IOException       {       InputStreamReader isr = new InputStreamReader(System.in);       BufferedReader br = new BufferedReader(isr);       String s = br.readLine();       return s;       } // -------------------------------------------------------------    public static char getChar() throws IOException       {       String s = getString();       return s.charAt(0);       } //-------------------------------------------------------------    public static int getInt() throws IOException       {       String s = getString();       return Integer.parseInt(s);       } // -------------------------------------------------------------    }  // end class TreeApp //////////////////////////////////////////////////////////////// 
 
 
 
 
 
 
 
 
 
 
 

Explanation / Answer

the answer is very big and please check the code

http://pastebin.com/KrW7SKGY