From ff3987dffc2aaa7b413e96d77e1ed44070d8f66d Mon Sep 17 00:00:00 2001 From: bt3gl <138340846+bt3gl-cryptographer@users.noreply.github.com> Date: Tue, 8 Aug 2023 14:32:28 -0700 Subject: [PATCH] Update bt_postorder.py --- trees/bt_postorder.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) 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