返回

深入剖析 LeetCode精选Top面试题之二叉树的最大深度

前端

前言

在计算机科学中,树是一种重要的数据结构。树可以用来组织和存储数据,并可以进行各种操作,如查找、插入、删除等。二叉树是树的一种特殊类型,其中每个节点最多有两个子节点。二叉树在计算机科学中有着广泛的应用,如二叉搜索树、哈夫曼树、优先队列等。

二叉树的最大深度

二叉树的最大深度是指从根节点到最远叶节点的最长路径的长度。二叉树的最大深度可以用来衡量二叉树的规模和复杂性。二叉树的最大深度可以通过递归或深度优先搜索来计算。

计算二叉树最大深度的方法

递归法

递归法是一种解决问题的常见方法,它可以将一个大问题分解成若干个小问题,然后分别解决这些小问题,最后将这些小问题的解组合起来得到大问题的解。计算二叉树的最大深度也可以使用递归法。

步骤如下:

  1. 如果二叉树为空,则其最大深度为0。
  2. 如果二叉树只有一个节点,则其最大深度为1。
  3. 如果二叉树有多个节点,则其最大深度为左子树的最大深度和右子树的最大深度中的较大者加1。

代码如下:

def max_depth(root):
    if root is None:
        return 0
    if root.left is None and root.right is None:
        return 1
    return max(max_depth(root.left), max_depth(root.right)) + 1

深度优先搜索法

深度优先搜索是一种遍历树或图的算法。深度优先搜索从根节点开始,一直沿着一条路径向下走,直到无法再走下去为止。然后,深度优先搜索回溯到上一个节点,沿着另一条路径向下走,以此类推,直到遍历完整个树或图。

计算二叉树的最大深度也可以使用深度优先搜索法。

步骤如下:

  1. 将根节点压入栈中。
  2. 从栈中弹出一个节点。
  3. 如果弹出的节点没有子节点,则其最大深度为1。
  4. 如果弹出的节点有子节点,则将其子节点压入栈中。
  5. 重复步骤2~4,直到栈中没有节点。
  6. 栈中最后一个弹出的节点的最大深度即为二叉树的最大深度。

代码如下:

def max_depth(root):
    if root is None:
        return 0
    stack = [root]
    max_depth = 0
    while stack:
        node = stack.pop()
        max_depth = max(max_depth, node.depth)
        if node.left:
            node.left.depth = node.depth + 1
            stack.append(node.left)
        if node.right:
            node.right.depth = node.depth + 1
            stack.append(node.right)
    return max_depth

结语

二叉树的最大深度是二叉树的重要属性之一。二叉树的最大深度可以用来衡量二叉树的规模和复杂性。二叉树的最大深度可以通过递归或深度优先搜索来计算。本文介绍了这两种方法的原理和实现,希望对读者有所帮助。