Name: Anonymous 2008-08-04 16:54
Iteration obviously, unless your algorithm can't possibly be implemented any other way.
( parent, left, right ), the following is a possibly correct prefix traversal of a binary search tree which is tail-return optimized to not use the stack.func around).def _iterate( curr, last, func ):
if not curr.parent: return None
if curr.parent == last:
func( curr )
if curr.left:
return _iterate( curr.left, curr, func )
elif curr.right:
return _iterate( curr.right, curr, func )
else
return _iterate( last, curr, func )
elif curr.left and curr.left == last:
if curr.right:
return _iterate( curr.right, curr, func )
else:
return _iterate( curr.parent, curr, func )
else:
return _iterate( curr.parent, curr, func )