Traverse a tree of Node objects, calling the
dispatch_visit() method of visitor when entering each
node. (The walkabout() method is similar, except it also
calls the dispatch_departure() method before exiting each
node.)

This tree traversal supports limited in-place tree
modifications. Replacing one node with one or more nodes is
OK, as is removing an element. However, if the node removed
or replaced occurs after the current node, the old node will
still be traversed, and any new nodes will not.