Java BST and Sorting Algorithms
Java BST and Sorting Algorithms
right, key);
return root; boolean searchRec(Node root, int key) {
} if (root == null)
1. Write a program to perform the following return false;
operations: // Delete an element if ([Link] == key)
a) Insert an element into a binary search tree. void delete(int key) { return true;
b) Delete an element from a binary search tree. root = deleteRec(root, key); return key < [Link] ? searchRec([Link], key) : searchRec([Link], key);
c) Search for a key element in a binary search tree. } }
(write code in java and give answers only)
Node deleteRec(Node root, int key) { // Inorder traversal
if (root == null) void inorder() {
java
return root; inorderRec(root);
}
class BST {
if (key < [Link])
class Node {
[Link] = deleteRec([Link], key); void inorderRec(Node root) {
int key;
else if (key > [Link]) if (root != null) {
Node left, right;
[Link] = deleteRec([Link], key); inorderRec([Link]);
else { [Link]([Link] + " ");
Node(int item) {
if ([Link] == null) inorderRec([Link]);
key = item;
return [Link]; }
left = right = null;
else if ([Link] == null) }
}
return [Link];
}
public static void main(String[] args) {
[Link] = minValue([Link]); BST tree = new BST();
Node root;
[Link] = deleteRec([Link], [Link]);
} [Link](50);
BST() {
return root; [Link](30);
root = null;
} [Link](20);
}
[Link](40);
int minValue(Node root) { [Link](70);
// Insert an element
int minv = [Link]; [Link](60);
void insert(int key) {
while ([Link] != null) { [Link](80);
root = insertRec(root, key);
minv = [Link];
}
root = [Link]; [Link]("Inorder traversal: ");
} [Link]();
Node insertRec(Node root, int key) {
return minv;
if (root == null) {
} [Link]("\nSearch 40: " + [Link](40));
root = new Node(key);
[Link]("Search 100: " + [Link](100));
return root;
// Search for an element
}
boolean search(int key) { [Link]("Delete 20");
if (key < [Link])
return searchRec(root, key); [Link](20);
[Link] = insertRec([Link], key);
} [Link]();
else if (key > [Link])
int i = 0; [Link](6);
public MinMaxHeap() {
if ([Link][0] < k) [Link]("Traversal after removing 6:");
heap = new ArrayList<>();
i++; [Link]();
}
} swap(m, parent);
private boolean isMinLevel(int index) { trickleDownMin(m);
int level = (int) ([Link](index + 1) / [Link](2)); private void bubbleUpMin(int i) { }
return level % 2 == 0; int gp = parent(parent(i)); } else if ([Link](m) < [Link](i)) {
} if (gp >= 0 && [Link](i) < [Link](gp)) { swap(m, i);
swap(i, gp); }
private int parent(int i) { bubbleUpMin(gp); }
return (i - 1) / 2; }
} } private void trickleDownMax(int i) {
int m = largestDescendant(i);
private int leftChild(int i) { private void bubbleUpMax(int i) { if (m == -1) return;
return 2 * i + 1; int gp = parent(parent(i));
} if (gp >= 0 && [Link](i) > [Link](gp)) { if (isGrandchild(i, m)) {
swap(i, gp); if ([Link](m) > [Link](i)) {
private int rightChild(int i) { bubbleUpMax(gp); swap(m, i);
return 2 * i + 2; } int parent = parent(m);
} } if ([Link](m) < [Link](parent))
swap(m, parent);
// Insert an element // Delete root element (min or max) trickleDownMax(m);
public void insert(int key) { public void deleteRoot() { }
[Link](key); if ([Link]()) return; } else if ([Link](m) > [Link](i)) {
bubbleUp([Link]() - 1); [Link](0, [Link]([Link]() - 1)); swap(m, i);
} [Link]([Link]() - 1); }
trickleDown(0); }
private void bubbleUp(int i) { }
if (i == 0) return; private boolean isGrandchild(int i, int m) {
int p = parent(i); private void trickleDown(int i) { return parent(parent(m)) == i;
if (isMinLevel(i)) { if (isMinLevel(i)) }
if ([Link](i) > [Link](p)) { trickleDownMin(i);
swap(i, p); else private int smallestDescendant(int i) {
bubbleUpMax(p); trickleDownMax(i); int size = [Link]();
} else { } int smallest = -1;
bubbleUpMin(i); int minVal = Integer.MAX_VALUE;
} private void trickleDownMin(int i) {
} else { int m = smallestDescendant(i); int[] indices = {leftChild(i), rightChild(i),
if ([Link](i) < [Link](p)) { if (m == -1) return; leftChild(leftChild(i)), rightChild(leftChild(i)),
swap(i, p); leftChild(rightChild(i)), rightChild(rightChild(i))};
bubbleUpMin(p); if (isGrandchild(i, m)) {
} else { if ([Link](m) < [Link](i)) { for (int idx : indices) {
bubbleUpMax(i); swap(m, i); if (idx < size && [Link](idx) < minVal) {
} int parent = parent(m); minVal = [Link](idx);
} if ([Link](m) > [Link](parent)) smallest = idx;
return x;
if (balance < -1 && key < [Link]) {
}
7. Write a program to perform the following [Link] = rightRotate([Link]);
operations: return leftRotate(node);
private AVLNode leftRotate(AVLNode x) {
a) Insert an element into a AVL tree. }
AVLNode y = [Link];
b) Delete an element from a AVL search tree.
AVLNode T2 = [Link];
c) Search for a key element in a AVL search tree. (write return node;
code in java and give answers only) }
[Link] = x;
[Link] = T2;
// Minimum value node
java
private AVLNode minValueNode(AVLNode node) {
[Link] = [Link](height([Link]), height([Link])) + 1;
class BoyerMooreAlgorithm {
[Link]("Text: " + txt);
[Link]("Pattern: " + pat);
private final int ALPHABET_SIZE = 256;
[Link](txt, pat);
}
// Function to create the bad character heuristic table
}
private void badCharHeuristic(String pat, int[] badChar) {
int m = [Link]();
for (int i = 0; i < ALPHABET_SIZE; i++)
badChar[i] = -1;
badCharHeuristic(pat, badChar);
46/47 47/47