REF 6H  Binary Trees   by Dane Henry

import java.util.*;
import java.lang.*;
import java.io.*;
// adding and viewing items in a binary tree
public class menuTest
{
myBST myBST = new myBST();
    public menuTest()
{
  int choice = menu();
while (choice != 3)
{
switch(choice)
       {
case 1: System.out.println("Enter String to be added:");
  Scanner inData = new Scanner(System.in);
  String nodeData = inData.nextLine();
                         boolean answer = myBST.add(nodeData);
                           if (answer = false)
                       {
System.out.println(nodeData + " was not added to the list.");
                           }
                                   else
                                  {
                                   System.out.println(nodeData + " was added to the list.");
                                   }
break;
        case 2:myBST.callTraversal();
}
choice = menu();
}
System.exit(0); 
     }
    public int menu()
{
System.out.println("1. Add an element \n2. Show all elements \n3. QUIT");
Scanner in = new Scanner(System.in);
int option = in.nextInt();
return option;
}
public static void main(String[] args)
{
  menuTest tt=new menuTest();
}
}

*****************************************************************************************
import java.lang.*;
import java.util.*;
import java.io.*;
// the class that actually does the work on the binary tree
// include documented displays to demonstrate recursion
public class myBST
	{
		private Node root;
		private boolean addReturn;
		public Node tempRoot;
        private String deleteReturn = null;
        private int count;

		private static class Node
			{
				private String data;
				private Node left;
				private Node right;

				private Node(String dataItem)
					{
						data = dataItem;
						left = null;
						right = null;
					}
			}
		public myBST()
			{
				root = null;
			}

		public boolean add(String aString)
			{
				count = 0;
			    root = add(root,aString);
				return addReturn;
			}
		private Node add(Node localRoot, String aString)
			{
				if(localRoot == null)
					{
						localRoot = new Node(aString);
						return localRoot;
					}
				if(aString.compareTo(localRoot.data) == 0)
					{
						System.out.println("CALL 1..." + aString + "  " + localRoot.data );
					    addReturn = false;
					    System.out.println("RETURN 1..." + aString + "  " + localRoot.data );
						return localRoot;
					}
				else if(aString.compareTo(localRoot.data) < 0)
					{
						System.out.println("CALL 2..." + aString + "  " + localRoot.data );
					    localRoot.left = add(localRoot.left, aString);
						System.out.println("RETURN 2..." + aString + "  " + localRoot.data );
					    return localRoot;
					}
				else
					{
						System.out.println("CALL 3..." + aString + "  " + localRoot.data );
					    localRoot.right = add(localRoot.right, aString);
					    System.out.println("RETURN 3..." + aString + "  " + localRoot.data );
						return localRoot;
					}
			}
	
		private void inOrderTraversal(Node currentRoot)
			{
				Node localNode = currentRoot;
				if(localNode == null)
					{
						return;
					}
				inOrderTraversal(localNode.left);
				System.out.println(localNode.data);
				inOrderTraversal(localNode.right);
			}
		public void callTraversal()
			{
				this.inOrderTraversal(root);
			}

	}