Data Structures19 sections · 729 units
Open in Course

Implicit Treap - Split by Size

Position-based splitting

Split by position rather than key:

function splitBySize(node, k)
    // Split into first k elements and rest
    if node is null then
        return (null, null)

    leftSize := size(node.left)
    if leftSize >= k then
        (left, right) := splitBySize(node.left, k)
        node.left := right
        updateSize(node)
        return (left, node)
    else
        (left, right) := splitBySize(node.right, k - leftSize - 1)
        node.right := left
        updateSize(node)
        return (node, right)

You can access the kk-th element or split at any position.