AVL Tree: A self-balancing binary search tree. Find operation is exactly like the binary search tree(BST). Deletion and Insertion operations follow the same step as the BST. Subsequently, AVL tree potentially needs to perform rotation and update nodes' height. AVL tree has the following properties:
1. If the left subtree is not empty, the values of all nodes on the left subtree are less than its rooted node
2. If the right subtree is not empty, the values of all nodes on the right subtree are greater than its rooted node
3. The heights of two children can not differ by more than one
API explanation:
1. Insert: Insert a new node - O(log(n))
2. Delete: Deleted a new node given a key - O(log(n))
3. Find: Find the node given a key - O(log(n))
4. Inorder Print: Print keys in ascending order - O(n)
6. Clear Tree: Clear the entire tree