This is a Java program to Implement Tree Set. A set is an abstract data structure that can store certain values, without any particular order, and no repeated values. Here Tree set maintains sorted order.
Here is the source code of the Java program to Implement Tree Set. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
* Java program to implement Tree Set
*/
import java.util.Scanner;
/** class TreeSetNode **/
class TreeSetNode
{
String data;
TreeSetNode left, right;
/** constructor **/
public TreeSetNode(String data, TreeSetNode left, TreeSetNode right)
{
this.data = data;
this.left = left;
this.right = right;
}
}
/** class TreeSet **/
class TreeSet
{
private TreeSetNode root;
private int size;
/** constructor **/
public TreeSet()
{
root = null;
size = 0;
}
/** function to check if empty **/
public boolean isEmpty()
{
return root == null;
}
/** function to clear **/
public void clear()
{
root = null;
size = 0;
}
/** function to insert an element **/
public void add(String ele)
{
root = insert(root, ele);
}
/** function to insert an element **/
private TreeSetNode insert(TreeSetNode r, String ele)
{
if (r == null)
r = new TreeSetNode(ele, null, null);
else
{
if (ele.compareTo(r.data) < 0)
r.left = insert(r.left, ele);
else if (ele.compareTo(r.data) > 0)
r.right = insert(r.right, ele);
}
return r;
}
/** Functions to count number of nodes **/
public int countNodes()
{
return countNodes(root);
}
/** Function to count number of nodes recursively **/
private int countNodes(TreeSetNode r)
{
if (r == null)
return 0;
else
{
int l = 1;
l += countNodes(r.left);
l += countNodes(r.right);
return l;
}
}
/** Functions to search for an element **/
public boolean contains(String ele)
{
return contains(root, ele);
}
/** Function to search for an element recursively **/
private boolean contains(TreeSetNode r, String ele)
{
boolean found = false;
while ((r != null) && !found)
{
if (ele.compareTo(r.data) < 0)
r = r.left;
else if (ele.compareTo(r.data) > 0)
r = r.right;
else
{
found = true;
break;
}
found = contains(r, ele);
}
return found;
}
/** Function to delete data **/
public void delete(String ele)
{
if (isEmpty())
System.out.println("Tree Empty");
else if (contains(ele) == false)
System.out.println("Error : "+ ele +" is not present");
else
{
root = delete(root, ele);
System.out.println(ele +" deleted from the tree set");
}
}
/** Function to delete element **/
private TreeSetNode delete(TreeSetNode r, String ele)
{
TreeSetNode p, p2, n;
if (r.data.equals(ele))
{
TreeSetNode lt, rt;
lt = r.left;
rt = r.right;
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.left != null)
p = p.left;
p.left = lt;
return p2;
}
}
if (ele.compareTo(r.data) < 0)
{
n = delete(r.left, ele);
r.left = n;
}
else
{
n = delete(r.right, ele);
r.right = n;
}
return r;
}
/** function toString() **/
public String toString()
{
return "[ "+ inorder(root, "") +"]";
}
private String inorder(TreeSetNode r, String str)
{
if (r != null)
return str + inorder(r.left, str) + r.data +" "+ inorder(r.right, str);
else
return "";
}
}
/** Class TreeSetTest **/
public class TreeSetTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
/** Creating object of TreeSetTest **/
TreeSet ts = new TreeSet();
System.out.println("Tree Set Test\n");
char ch;
/** Perform set operations **/
do
{
System.out.println("\nTree Set Operations\n");
System.out.println("1. add ");
System.out.println("2. delete");
System.out.println("3. contains");
System.out.println("4. count ");
System.out.println("5. check empty");
System.out.println("6. clear");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter element to insert");
ts.add( scan.next() );
break;
case 2 :
System.out.println("Enter element to delete");
ts.delete( scan.next() );
break;
case 3 :
System.out.println("Enter integer element to search");
System.out.println("Search result : "+ ts.contains( scan.next() ));
System.out.println();
break;
case 4 :
System.out.println("Count = "+ ts.countNodes());
break;
case 5 :
System.out.println("Empty status = "+ ts.isEmpty());
break;
case 6 :
System.out.println("Tree set cleared");
ts.clear();
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
/** Display tree set **/
System.out.print("\nTree Set : "+ ts);
System.out.println();
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
}
Tree Set Test Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 5 Empty status = true Tree Set : [ ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 1 Enter element to insert mango Tree Set : [ mango ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 1 Enter element to insert strawberry Tree Set : [ mango strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 1 Enter element to insert apple Tree Set : [ apple mango strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 1 Enter element to insert pineapple Tree Set : [ apple mango pineapple strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 1 Enter element to insert orange Tree Set : [ apple mango orange pineapple strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 1 Enter element to insert jackfruit Tree Set : [ apple jackfruit mango orange pineapple strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 4 Count = 6 Tree Set : [ apple jackfruit mango orange pineapple strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 2 Enter element to delete jackfruit jackfruit deleted from the tree set Tree Set : [ apple mango orange pineapple strawberry ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 2 Enter element to delete strawberry strawberry deleted from the tree set Tree Set : [ apple mango orange pineapple ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 3 Enter integer element to search strawberry Search result : false Tree Set : [ apple mango orange pineapple ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 4 Count = 4 Tree Set : [ apple mango orange pineapple ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 5 Empty status = false Tree Set : [ apple mango orange pineapple ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 6 Tree set cleared Tree Set : [ ] Do you want to continue (Type y or n) y Tree Set Operations 1. add 2. delete 3. contains 4. count 5. check empty 6. clear 5 Empty status = true Tree Set : [ ] Do you want to continue (Type y or n) n
Related posts:
DynamoDB in a Spring Boot Application Using Spring Data
Guide to java.util.concurrent.Locks
Getting a File’s Mime Type in Java
Tạo số và chuỗi ngẫu nhiên trong Java
Java – Reader to String
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Guide to Dynamic Tests in Junit 5
Java Program to Implement Levenshtein Distance Computing Algorithm
Java Program to Check Whether an Input Binary Tree is the Sub Tree of the Binary Tree
The XOR Operator in Java
New Features in Java 9
Java – File to Reader
Extract network card address
Use Liquibase to Safely Evolve Your Database Schema
A Quick JUnit vs TestNG Comparison
A Custom Data Binder in Spring MVC
Java Program to Implement Control Table
Java Program to Implement Naor-Reingold Pseudo Random Function
Java Program to Implement Regular Falsi Algorithm
Adding Shutdown Hooks for JVM Applications
New Features in Java 12
Quick Guide to @RestClientTest in Spring Boot
RegEx for matching Date Pattern in Java
Chuyển đổi Array sang ArrayList và ngược lại
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Guide to @JsonFormat in Jackson
Java Program to Implement the Program Used in grep/egrep/fgrep
Java toString() Method
Posting with HttpClient
Hướng dẫn Java Design Pattern – Memento
ETL with Spring Cloud Data Flow
Marker Interface trong Java