def post_order_iterative_one_stack(node): if node == None: return stack1 = Stack() stack1.push(node) prev = None while not stack1.is_empty(): curr = stack1.top() if (prev == None or prev.right == curr or prev.left ==curr): # go down the Tree if curr.left != None: stack1.push(curr.left) elif curr.right != None: stack1.push(curr.right) else: print stack1.pop() elif curr.left == prev: if curr.right != None: stack1.push(curr.right) else: print stack1.pop() elif curr.right == prev: print stack1.pop() prev = curr