Звучит так, будто вы хотите шаблон Memento . По сути, вы создаете объект, который имеет всю информацию, необходимую для:
- Из состояния дерева перед операцией повторите операцию. (Redo)
- Из состояния дерева после операции отменить операцию. (Undo)
Ты бы оставил последние пять из них рядом. Когда пользователь запрашивает отмену, возьмите последнюю версию, попросите ее отменить операцию, а затем укажите каким-либо образом (например, некоторую переменную индекса), где вы находитесь в списке сувениров. После этого вы сможете перемещаться по списку в любом направлении, отменяя и возвращая его столько, сколько хотите.