返回

快速掌握LeetCode日常之树:104 二叉树最大深度

闲谈

引言:

LeetCode 日常之树:104 二叉树最大深度是 LeetCode 中一道经典的树算法题目。它要求你找到给定二叉树的最大深度,即从根节点到最远叶子节点的最长路径上的节点数。这道题看似简单,但它实际上涉及到一些重要的树的知识和算法技巧。

一、什么是二叉树?

二叉树是一种非常重要的数据结构,它由节点和指针组成。每个节点最多有两个指针,分别指向其左子节点和右子节点。下图展示了一个简单的二叉树:

[图片]

在这个二叉树中,根节点为 A,左子节点为 B,右子节点为 C。B 和 C 都是叶子节点,因为它们没有子节点。

二、二叉树的最大深度

二叉树的最大深度是根节点到最远叶子节点的最长路径上的节点数。在上面的例子中,最大深度为 3,因为从根节点 A 到叶子节点 C 的路径是 A -> B -> C,路径上的节点数为 3。

三、算法

求解二叉树的最大深度可以使用递归或迭代两种方法。

1. 递归方法

递归方法的基本思想是:

  1. 如果当前节点为空,则返回 0。
  2. 如果当前节点不是空,则递归地计算其左子节点和右子节点的最大深度。
  3. 返回当前节点的最大深度为其左子节点和右子节点的最大深度中较大的那个加 1。

以下是用递归方法实现的代码:

def max_depth(root):
    if root is None:
        return 0
    else:
        left_depth = max_depth(root.left)
        right_depth = max_depth(root.right)
        return max(left_depth, right_depth) + 1

2. 迭代方法

迭代方法的基本思想是:

  1. 使用一个队列来存储所有待处理的节点。
  2. 从队列中取出一个节点,并将其左子节点和右子节点加入队列。
  3. 重复步骤 2,直到队列为空。
  4. 返回队列中最后取出节点的深度。

以下是用迭代方法实现的代码:

def max_depth(root):
    if root is None:
        return 0

    queue = [root]
    depth = 0

    while queue:
        # 将当前层的节点全部出队
        for _ in range(len(queue)):
            node = queue.pop(0)

            # 将当前节点的左右子节点入队
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)

        # 当前层全部出队后,深度加 1
        depth += 1

    return depth

四、结语

通过本文,你应该已经对二叉树的最大深度算法有了深入的了解。掌握了这个算法,你将能够解决 LeetCode 中更多关于树的题目。希望本文对你有帮助!