gumgum's Garden🌼

Postorder Preorder Inorder traversal in one Traversal

This solution is based on the fact that in

  • preorder traversal we print the node when we visit the node 1st time
  • inorder traversal we print the node when we visit the node 2nd time
  • postorder traversal we print the node when we visit the node 3rd time
def single_traversal(root):
    preorder = []
    postorder = []
    inorder = []
    stack = [[root, 1]]
    while len(stack) != 0:
        node, count = stack.pop()
        if count == 1:
            preorder.append(node.val)
            stack.append([node, count + 1])
            if node.left is not None:
                stack.append([node.left, 1])
        elif count == 2:
            inorder.append(node.val)
            stack.append([node, count + 1])
            if node.right is not None:
                stack.append([node.right, 1])
        else:
            postorder.append(node.val)
    print(preorder)
    print(postorder)
    print(inorder)