diff --git a/trees/bt_postorder.py b/trees/bt_postorder.py index e5d8826..d3aa1a1 100644 --- a/trees/bt_postorder.py +++ b/trees/bt_postorder.py @@ -4,8 +4,34 @@ def postorder(root) -> list: - if root is None: + if root is None: return [] - return postorder(root.left) + postorder(root.right) + [root.val] + return postorder(root.left) + postorder(root.right) + [root.val] + + +def postorder_iterative(root) -> list: + + stack, result = [], [] + node = root + + while node or stack: + + while node: + if node.right: + stack.append(node.right) + stack.append(node) + node = node.left + + node = stack.pop() + + if stack and node.right == stack[-1]: + stack[-1] = node + node = node.right + + else: + result.append(node.val) + node = None + + return result