AVL Tree
AVL Tree
*;
Node(int key) {
this.key = key;
this.height = 1;
}
}
class AVLTree {
Node root;
Node rightRotate(Node y) {
Node x = y.left;
Node T2 = x.right;
// Perform rotation
x.right = y;
y.left = T2;
// Update heights
y.height = Math.max(height(y.left), height(y.right)) + 1;
x.height = Math.max(height(x.left), height(x.right)) + 1;
return x;
}
Node leftRotate(Node x) {
Node y = x.right;
Node T2 = y.left;
// Perform rotation
y.left = x;
x.right = T2;
// Update heights
x.height = Math.max(height(x.left), height(x.right)) + 1;
y.height = Math.max(height(y.left), height(y.right)) + 1;
return y;
}
// Left Heavy
if (balance > 1) {
if (key < node.left.key) {
return rightRotate(node);
} else {
node.left = leftRotate(node.left);
return rightRotate(node);
}
}
// Right Heavy
if (balance < -1) {
if (key > node.right.key) {
return leftRotate(node);
} else {
node.right = rightRotate(node.right);
return leftRotate(node);
}
}
return node;
}