Problem/Opportunity
Sometimes it is hard to use remove because it always selects the previous node in a depth-first traversal. So after removing a selection may move arbitrarily deep in the tree structure. I propose to have an alternative version that applies a given traversal function so that you have better control over the selected node after the deletion.
Proposed Solution
(z/remove zloc z/left) selects the left sibling node after removing the current node.
(z/remove zloc z/right) selects the right sibling node after removing the current node.
(z/remove zloc z/prev) matches the current behavior.
Similar changes for z/remove* function.
Problem/Opportunity
Sometimes it is hard to use
removebecause it always selects the previous node in a depth-first traversal. So after removing a selection may move arbitrarily deep in the tree structure. I propose to have an alternative version that applies a given traversal function so that you have better control over the selected node after the deletion.Proposed Solution
(z/remove zloc z/left)selects the left sibling node after removing the current node.(z/remove zloc z/right)selects the right sibling node after removing the current node.(z/remove zloc z/prev)matches the current behavior.Similar changes for
z/remove*function.