Consider:
def iterInOrder(node):
if node.left:
for n in iterInOrder(node.left):
yield n
yield node
if node.right:
for n in iterInOrder(node.right):
yield n
And let n
be number of nodes in the input binary tree, Do we create a single generator that yields n nodes? Or do we create n
iterators that each generate a node? what can you say about space/time complexity of that code comparing to a simple recursive travel:
def visitInOrder(node):
if node.left:
visitInOrder(node.left)
visit(node)
if node.right:
visitInOrder(node.right)
I care more for Python 2, but may be nice to know if answer differs for Python 3.