Given the root of a binary tree, return the preorder traversal of its nodes' values.

 

Example 1:

Input: root = [1,null,2,3]
Output: [1,2,3]

Example 2:

Input: root = []
Output: []

Example 3:

Input: root = [1]
Output: [1]

 

Constraints:

  • The number of nodes in the tree is in the range [0, 100].
  • -100 <= Node.val <= 100

 

Follow up: Recursive solution is trivial, could you do it iteratively?



SolvingApproachs:

  1. Recursive Solution
def preorder_traversal(self, root):
        """ Pre-order Tree traversal with recursive function call. root -> left -> Right """
        if root:
            self.result.append(root.val)
            self.preorder_traversal(root.left)
            self.preorder_traversal(root.right)

        return self.result
  1. Iterative Solution
def preorder_traversal_iterative(self, root):
        """ Pre-order traversal with iterative manner"""
        stack = []
        current = root
        while current or stack:
            while current:
                self.result.append(current.val)
                stack.append(current)
                current = current.left

            current = stack.pop()
            current = current.right

        return self.result