programming-examples/java/Data_Structures/Java program to Implement Tree Set.java
2019-11-15 12:59:38 +01:00

514 lines
10 KiB
Java

/*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.*/
/**
* 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 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