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:
Spring Cloud AWS – EC2
Java Program to Implement Skip List
How to Store Duplicate Keys in a Map in Java?
Java Program to Perform Search in a BST
Java – Combine Multiple Collections
Java Program to Implement Triply Linked List
Java – String to Reader
Iterable to Stream in Java
Java Program to Show the Duality Transformation of Line and Point
Spring MVC + Thymeleaf 3.0: New Features
Spring WebClient Filters
CyclicBarrier in Java
Guide to the ConcurrentSkipListMap
Java Program to Convert a Decimal Number to Binary Number using Stacks
Java Program to implement Priority Queue
Chuyển đổi từ HashMap sang ArrayList
Assert an Exception is Thrown in JUnit 4 and 5
Truyền giá trị và tham chiếu trong java
Pagination and Sorting using Spring Data JPA
Guide to ThreadLocalRandom in Java
Java Program to Perform Cryptography Using Transposition Technique
Explain about URL and HTTPS protocol
Spring Security Form Login
OAuth2 Remember Me with Refresh Token
Java TreeMap vs HashMap
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
A Guide to ConcurrentMap
Guide to WeakHashMap in Java
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Spring’s RequestBody and ResponseBody Annotations
Static Content in Spring WebFlux
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...