Maximum Depth of Binary Tree (Leetcode #104)

Given the root of a binary tree, return its maximum depth.

A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

Example 1:

Input: root = [3,9,20,null,null,15,7]
Output: 3

Example 2:

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

Constraints:

  • The number of nodes in the tree is in the range [0, 10<sup>4</sup>].

  • -100 <= Node.val <= 100

Answer

In this question, we use the Depth-First Search (DFS) algorithm. The maximum depth of each node is calculated as 1 plus the maximum depth of its children. This means we start from the bottom of the tree, determining the depth of each left and right subtree recursively, and then work our way up to the root. The depth of the root node ultimately gives us the maximum depth of the entire tree.

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))

Time Complexity

The time complexity is O(N) because we visit each node exactly once.

Space Complexity

The space complexity depends on the height of the tree. If the tree is balanced, the recursion depth is O(log N), resulting in a space complexity of O(log N). However, in the worst case, where the tree is completely unbalanced, the space complexity is O(N).