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:
Validations for Enum Types
Java Program to Implement the One Time Pad Algorithm
Tổng quan về ngôn ngữ lập trình java
Runnable vs. Callable in Java
Loại bỏ các phần tử trùng trong một ArrayList như thế nào trong Java 8?
The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5
How To Serialize and Deserialize Enums with Jackson
Java Program to Implement Merge Sort on n Numbers Without tail-recursion
A Guide to Iterator in Java
Introduction to Eclipse Collections
HashSet trong java
Disable DNS caching
Java Program to Check if an UnDirected Graph is a Tree or Not Using DFS
Working With Maps Using Streams
Java Program to Implement Hash Tables with Linear Probing
StringBuilder vs StringBuffer in Java
The Difference Between map() and flatMap()
Hướng dẫn Java Design Pattern – Decorator
Simple Single Sign-On with Spring Security OAuth2
Introduction to Spring Data JPA
Generate Spring Boot REST Client with Swagger
Exploring the Spring 5 WebFlux URL Matching
Registration – Password Strength and Rules
Show Hibernate/JPA SQL Statements from Spring Boot
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Predicate trong Java 8
JUnit 5 @Test Annotation
Overflow and Underflow in Java
Java List UnsupportedOperationException
Giới thiệu Swagger – Công cụ document cho RESTfull APIs
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees