First: Implement the class TreapADT including an search, insert, and delete methods.
Then split the tree by adding a SplitTree method.
âœ” The tree splitting problem is this:
âœ— Given a tree and a key value K not in the tree, create two trees: One with keys less than K, and one with keys greater than K
âœ” This is easy to solve with a treap, once the insert operation has been implemented:
âœ— Insert (K, INFINITY) in the treap
âœ— Since this has a higher priority than any node in the heap, it will become the root of the treap after insertion
âœ— Because of the BST ordering property, the left subtree of the root will be a treap with keys less than K, and the right subtree of the root will be a treap with keys greater than K. These subtrees then are the desired result of the split
âœ” Since insert can be done in time O(H) where H is the height of the treap, splitting can also be done in time O(H)