+#else
+
+ // newer version of delete doesn't recurse; it just iterates instead,
+ // which avoids the massive recursive depth of the original approach.
+ tree *curr_node = this;
+ while (curr_node != NULL_POINTER) {
+ // make a breadcrumb for getting back to 'here' in the tree.
+ tree *way_back = curr_node;
+ // our main operation here is to go down a node without using any
+ // stack frames. so we just pick the first kid; it's either valid
+ // or there are no kids at all.
+ curr_node = curr_node->branch(0);
+
+LOG(a_sprintf("loop traverse on %p", curr_node));
+
+ if (curr_node == NULL_POINTER) {
+ // wayback has no children, so we can take action.
+LOG(a_sprintf("inside null condition, loop traverse on %p", curr_node));
+
+ // if wayback is the same as "this", then we exit from iterations since
+ // we've cleaned all the kids out.
+ if (way_back == this) {
+ break;
+ }
+
+ // we want to whack the wayback node at this point, since it's a parent
+ // with no kids, i.e. a leaf. we've guaranteed we're not going beyond
+ // our remit, since wayback is not the same node as the top level one
+ // in the destructor (as long as there are no cycles in the tree...).
+ curr_node = way_back->parent(); // go up in tree on next iteration.
+ delete way_back; // whack a node, finally.
+
+ } else {
+ // okay, there's a node below here. we will spider down to it.
+ continue;
+ }
+
+
+ }
+
+#endif
+
+