(1)Objective: Binary Search Tree traversal (2 points) Use traversal.pptx as guidance to write a program to build a binary search tree Dictionary. I of BST have the same data from each input record. Download traversal-lab.pptx, inventory.txt, BinNode.java, BSTNode.java, BST.java, Dictionary.java . Perform specifications as follow: (a)Provide Add, Delete and Retrieve functions for user to access the database. Reject duplicate record when add a new record. (b)Modify BST.java to add printpostOrder, printpreOrder methods. (c)At the end, display inorder, postorder and preorder of the tree. Codes: /** Source code example for \"A Practical Introduction to Data Structures and Algorithm Analysis, 3rd Edition (Java)\" by Clifford A. Shaffer Copyright 2008-2011 by Clifford A. Shaffer */ /** ADT for binary tree nodes */ public interface BinNode { /** Get and set the element value */ public E element(); public void setElement(E v); /** @return The left child */ public BinNode left(); /** @return The right child */ public BinNode right(); /** @return True if a leaf node, false otherwise */ public boolean isLeaf(); } //******************************************************************** // StringTree.java // //******************************************************************** import java.util.*; public class StringTree { private Node root; //---------------------------------------------------------------- // Creates an initially empty tree. //---------------------------------------------------------------- public StringTree() { root = null; } //---------------------------------------------------------------- // Adds a string to the tree. //---------------------------------------------------------------- public void addString (String str) { root = addStringToSubTree(str, root); } //---------------------------------------------------------------- // Adds a string to the subtree with the given root node //---------------------------------------------------------------- private Node addStringToSubTree (String str, Node node) { Node result = node; if (node == null) result = new Node(str); // If the new string comes before the string in the node, add // the new string to the left child. Otherwise, add it to the // right child. else if (str.compareTo(node.value) < 0) node.left = addStringToSubTree(str, node.left); else node.right = addStringToSubTree(str, node.right); return result; } //---------------------------------------------------------------- // Prints the result of a depth-first traversal of the tree using // recursion. //---------------------------------------------------------------- public void traverseWithRecursion() { traverseWithRecursion(root); } //---------------------------------------------------------------- // Prints the elements in the specified tree using recursion. //---------------------------------------------------------------- private void traverseWithRecursion (Node node) { if (node != null) { traverseWithRecursion (node.left); System.