the above code doesn't handle the case where the user wants to remove the root node. right now, it asks the node's parent to add node's children. but a root node doesn't have a parent. it would be f. I read that on balanced trees, they take the left child's max, add its children (left or none) to its parent, then back to the top of the tree, use that node as the new root, and add the previous left and right to it. it's pretty good, because the order is kept. here's untested code : root-remove ( node -- ) [ children ] [ left max dup remove f >>right f >>left ] bi add-nodes ; : normal-remove ( node -- ) dup [ [ children harvest ] [ parent>> ] [ rm-child ] tri add-nodes ] when drop ; : remove ( node -- ) dup root eq? [ root-remove ] [ normal-remove ] if ;