This is a Java Program to implement Leftist Heap. A leftist heap is a priority queue implemented with a variant of a binary heap. Every node has an s-value which is the distance to the nearest leaf. In contrast to a binary heap, a leftist tree attempts to be very unbalanced. In addition to the heap property, leftist trees are maintained so the right descendant of each node has the lower s-value.
Here is the source code of the Java program to implement Leftist Heap. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/**
* Java Program to Implement LeftistHeap
**/
import java.util.Scanner;
/** Class LeftHeapNode **/
class LeftHeapNode
{
int element, sValue;
LeftHeapNode left, right;
public LeftHeapNode(int ele)
{
this(ele, null, null);
}
public LeftHeapNode(int ele, LeftHeapNode left, LeftHeapNode right)
{
this.element = ele;
this.left = left;
this.right = right;
this.sValue = 0;
}
}
/** Class LeftistHeap **/
class LeftistHeap
{
private LeftHeapNode root;
/** Constructor **/
public LeftistHeap()
{
root = null;
}
/** Check if heap is empty **/
public boolean isEmpty()
{
return root == null;
}
/** Make heap empty **/
public void clear( )
{
root = null;
}
/** Function to insert data **/
public void insert(int x )
{
root = merge(new LeftHeapNode( x ), root);
}
/** Function merge **/
public void merge(LeftistHeap rhs)
{
if (this == rhs)
return;
root = merge(root, rhs.root);
rhs.root = null;
}
/** Function merge **/
private LeftHeapNode merge(LeftHeapNode x, LeftHeapNode y)
{
if (x == null)
return y;
if (y == null)
return x;
if (x.element > y.element)
{
LeftHeapNode temp = x;
x = y;
y = temp;
}
x.right = merge(x.right, y);
if(x.left == null)
{
x.left = x.right;
x.right = null;
}
else
{
if(x.left.sValue < x.right.sValue)
{
LeftHeapNode temp = x.left;
x.left = x.right;
x.right = temp;
}
x.sValue = x.right.sValue + 1;
}
return x;
}
/** Function to delete minimum element **/
public int deleteMin( )
{
if (isEmpty() )
return -1;
int minItem = root.element;
root = merge(root.left, root.right);
return minItem;
}
/** Inorder traversal **/
public void inorder()
{
inorder(root);
System.out.println();
}
private void inorder(LeftHeapNode r)
{
if (r != null)
{
inorder(r.left);
System.out.print(r.element +" ");
inorder(r.right);
}
}
}
/** Class LeftistHeapTest **/
public class LeftistHeapTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("LeftistHeap Test\n\n");
LeftistHeap lh = new LeftistHeap();
char ch;
/** Perform LeftistHeap operations **/
do
{
System.out.println("\nLeftist Heap Operations\n");
System.out.println("1. insert ");
System.out.println("2. delete min");
System.out.println("3. check empty");
System.out.println("4. clear");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter integer element to insert");
lh.insert( scan.nextInt() );
break;
case 2 :
lh.deleteMin();
break;
case 3 :
System.out.println("Empty status = "+ lh.isEmpty());
break;
case 4 :
lh.clear();
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
/** Display heap **/
System.out.print("\nInorder Traversal : ");
lh.inorder();
System.out.println("\nDo you want to continue (Type y or n) \n");
ch = scan.next().charAt(0);
} while (ch == 'Y'|| ch == 'y');
}
}
LeftistHeap Test Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 1 Enter integer element to insert 24 Inorder Traversal : 24 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 1 Enter integer element to insert 6 Inorder Traversal : 24 6 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 1 Enter integer element to insert 19 Inorder Traversal : 24 6 19 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 1 Enter integer element to insert 94 Inorder Traversal : 24 6 94 19 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 1 Enter integer element to insert 5 Inorder Traversal : 24 6 94 19 5 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 1 Enter integer element to insert 63 Inorder Traversal : 24 6 94 19 5 63 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 2 Inorder Traversal : 94 19 63 6 24 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 2 Inorder Traversal : 94 19 63 24 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 2 Inorder Traversal : 63 24 94 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 2 Inorder Traversal : 94 63 Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 4 Inorder Traversal : Do you want to continue (Type y or n) y Leftist Heap Operations 1. insert 2. delete min 3. check empty 4. clear 3 Empty status = true Inorder Traversal : Do you want to continue (Type y or n) n
Related posts:
Java Program to Check whether Directed Graph is Connected using DFS
Vector trong Java
Filtering a Stream of Optionals in Java
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
Wiring in Spring: @Autowired, @Resource and @Inject
Converting Java Date to OffsetDateTime
Guide to BufferedReader
Java Program to Implement Bresenham Line Algorithm
Java Program to Implement Ternary Heap
The Dining Philosophers Problem in Java
How to Delay Code Execution in Java
Quick Guide to Spring Controllers
Get and Post Lists of Objects with RestTemplate
Static Content in Spring WebFlux
Java Program to Implement Binomial Heap
Filtering and Transforming Collections in Guava
Converting between an Array and a List in Java
Java – Delete a File
Receive email by java client
Java Program to Implement Gift Wrapping Algorithm in Two Dimensions
Serialization và Deserialization trong java
Java Program to Implement the Program Used in grep/egrep/fgrep
A Guide to the Java LinkedList
Java Concurrency Interview Questions and Answers
Java Program to Implement the Vigenere Cypher
Java – Write an InputStream to a File
Java Program to Implement the Checksum Method for Small String Messages and Detect
Spring 5 Functional Bean Registration
A Custom Data Binder in Spring MVC
Getting Started with GraphQL and Spring Boot
Từ khóa this và super trong Java
Tạo ứng dụng Java RESTful Client với thư viện OkHttp