Preorder Traversal

^33568e

rootNode comes before its children, hence the name

Recursive

def preOrderTraversal(rootNode: TreeNode) -> None:
    if not rootNode:
        return None
    visit(rootNode)

    preOrderTraversal(rootNode.left)
    preOrderTraversal(rootNode.right)

Iterative
We're using stack

def preOrderTraversalIterative(rootNode: TreeNode) -> None:
    if not rootNode:
        return None

    stack = deque([rootNode])
    while stack:
        currNode = stack.popleft()
        visit(currNode)
        # Node add the right first before left for next iteration to pop the left first
        if (currNode.right):
            stack.appendleft(currNode.right)
        if (currNode.left):
            stack.appendleft(currNode.left)