94 Binary Tree Inorder Traversal - Easy

Problem:

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

Example 1:

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

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?

Problem Analysis:

  • Time Complexity: O(N) where N is the number of nodes
  • Space Complexity: O(H) where H is the height of the binary tree

Solutions:

Recursion

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        self.inorder_recur(root, result)
        return result
    
    def inorder_recur(self, node, result):
        if node:
            # Traverse left subtree
            self.inorder_recur(node.left, result)
            
            # Visit the root node
            result.append(node.val)
            
            # Traverse right subtree
            self.inorder_recur(node.right, result)

Iterative

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        stack = []
        current = root

        while current or stack:
            # Traverse as left as possible, pushing nodes onto the stack
            while current:
                stack.append(current)
                current = current.left

            current = stack.pop()
            result.append(current.val)
            # Move to the right child of the popped node
            current = current.right

        return result```
## Similar Questions