AVL tree

Summary
AVL tree is binary search tree whose height is of the order of O(log n), and it guarantees data insertion, retrieval and removal times of the order of O(log n) where n is the number of nodes in the tree. AVL tree is a efficient data structure which can be used for fast retrieval of data.

Explanation
The tree is able to provide O(log n) transactions because the tree is close to be a complete binary tree. Height of left subtree and right subtree of any node in AVL tree is never greater than 1. If the insertion or deletion of any node in the tree violate the balance factor of the node i.e. it balance factor becomes greater than one then the tree around the node has to be restructured using one of the tree rotation techniques. There are four types of rotations possible in a AVL tree viz. right-right rotation(RR), right-left(RL) rotation, left-left rotation(LL), and left-right rotation(LR). The RR and LL rotations are mirror images and the RL and LR rotations are mirror images of each other.

Gotchas

 * Any points one can easily overlook?
 * The correct way to understand ambiguous formulations?

Implementations
Notes/Hints on actual implementation here.

Optimizations
Optimizations here.

Input
Input Here

Output
Output Here