Binary Search Tree: It 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
API explanation:
1. Insert: Insert a new node - average O(log(n)), worst case O(n)
2. Delete: Deleted a new node given a key - average O(log(n)), worst case O(n)
3. Find: Find the node given a key - average O(log(n)), worst case O(n)
4. Inorder Print: Print keys in ascending order - O(n)
5. Balance Tree: Rebalance the tree with sorted keys - O(n)
6. Clear Tree: Clear the entire tree