| Idea: |
- instead of copying nodes (as path copying does), keep every node forever and make its pointers versioned: a "fat" node stores, for each child slot, the full history of pointers ever written into it, each stamped with the version that wrote it
- when reading version \(v\), we need to find the last update before \(v\), i.e. the largest version stamp \(\le v\)
- an update writes \(O(1)\) new pointer entries and never erases old ones — deletion just writes a null pointer (a tombstone) or redirects a pointer past the deleted node
|