Given a Binary Search Tree, iterate over the elements without using recursion.
Anonimo
rechecked on pre order and post order, not as easy as I think. The state whether right sub-tree has be visited need to be pushed into the stack along with the elements: def preorder(node): stack = [] leftChecked = rightChecked = False while True: if not leftChecked: yield node.data if not leftChecked and node.left: stack.append((node, False)) node = node.left elif not rightChecked and node.right: stack.append((node, True)) node = node.right leftChecked = False elif len(stack) > 0: node, rightChecked = stack.pop() leftChecked = True else: break; def postorder(node): stack = [] leftChecked = rightChecked = False while True: if not leftChecked and node.left: stack.append((node, False)) node = node.left elif not rightChecked and node.right: stack.append((node, True)) node = node.right leftChecked = False else: yield node.data if len(stack) > 0: node, rightChecked = stack.pop() leftChecked = True else: break;