4.2. Balanced BST
This section discusses abstraction of binary search trees.
A binary search tree gives the worst-case complexity of O(n)for searching a key when it is not balanced, where n is the number of nodes in the tree:
To ensure the complexity, it needs to be balanced at all time (or at most time).
There are 4 cases of unbalanced trees to be considered:
These cases can be balanced by performing rotations as follows:
What should happen to the subtrees (red/orange/green/blue triangles) after the rotations?
Abstract Balanced Binary Search Tree
Let us create an abstract class that inherits the abstract class AbstractBinarySearchTree:
Where does node end up being after the rotations?
The followings demonstrate how the rotateLeft() method works:
Let us override the add() and remove() methods that call the abstract method balance():
L3: calls the add() method in the super class, AbstractBinarySearchTree.
L4: performs balancing on node that is just added.
What are the worst-case complexities of the add() and remove() methods above?