Zig Zig Not Twice

Why does splay use the zig-zig double rotation instead of simply rotating the node up twice?

A

Two plain rotations leave the accessed path essentially as long as it was, so the potential never drops. Zig-zig leaves the tree height balanced after every splay, and that standing invariant is what the amortized argument charges the work to.

B

Two plain rotations leave the accessed path essentially as long as it was, so the potential never drops. Zig-zig roughly halves the depth of everything on the path, and that drop is what the amortized argument charges the work to.

C

Two plain rotations leave the accessed path essentially as long as it was, so the potential never drops. Zig-zig repairs the BST invariant that the second single rotation would break, and that repair is what the amortized argument charges the work to.

D

Two plain rotations halve the accessed path exactly as zig-zig does, so the potential drops either way. Zig-zig saves a handful of pointer writes, and that constant factor is what the amortized argument charges the work to.