*Tree Traversals - ALawliet/algorithms GitHub Wiki

class Solution:
    def inorderIterative(self, root: TreeNode) -> List[int]:
        res = []
        stack = []
        while stack or root:
            if root:
                stack.append(root)
                root = root.left
            else:
                node = stack.pop()
                res.append(node.val)
                root = node.right
        return res
class Solution:
    def postorderIterative(self, root: TreeNode) -> List[int]:
        res = []
        stack = [root]
        while stack:
            node = stack.pop()
            if node:
                res.append(node.val) # pre-order with stack
                stack.append(node.left)
                stack.append(node.right) # so right goes on top
        return res[::-1] # reverse result
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = deque()
        if root is None: return res
        Q = deque([root])
        while Q:
            levelSize = len(Q)
            currentLevel = []
            for _ in range(levelSize):
                node = Q.popleft()
                currentLevel.append(node.val)
                if node.left:
                    Q.append(node.left)
                if node.right:
                    Q.append(node.right)
            res.append(currentLevel)
        return res