leetcode
leetcode 101 ~ 150
二叉树的最大深度

二叉树的最大深度

难度:

标签:

题目描述

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

 

示例 1:

 

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

 

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100

代码结果

运行时间: 48 ms, 内存: 16.7 MB


/*
 * 题目思路:
 * 使用Java Stream来实现二叉树的最大深度计算。使用递归的方式,对于每个节点,计算其左右子树的最大深度,然后取最大值再加1。
 */
import java.util.stream.Stream;
 
public class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0; // 如果节点为空,则深度为0
        }
        // 计算左右子树的最大深度,并取最大值加1
        return Stream.of(root.left, root.right)
                     .mapToInt(this::maxDepth)
                     .max()
                     .orElse(0) + 1;
    }
}
 
// TreeNode类的定义
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

解释

方法:

该题解采用递归的思路来解决二叉树的最大深度问题。对于一个二叉树的节点,如果该节点为空,则返回深度 0;否则递归计算该节点的左子树和右子树的最大深度,取两者的最大值,然后加 1 作为当前节点的最大深度,并返回该深度值。

时间复杂度:

O(n)

空间复杂度:

O(n)

代码细节讲解

🦆
在二叉树的最大深度问题中,递归函数的基本情况是什么,为什么选择这种基本情况?
基本情况是当二叉树的节点为null时,此时函数返回深度0。选择这种基本情况是因为它代表了二叉树的底部边界,即没有子节点的情况。在递归中处理基本情况是必要的,它确保递归调用能够在达到树的末端时正确终止,并为上层递归调用提供正确的返回值。
🦆
对于递归解法,您是如何考虑和处理递归调用的终止条件的?
递归调用的终止条件在这个问题中是检查当前节点是否为null。如果是null,则返回深度0,这意味着没有更多的子节点可以进一步递归,实际上是递归过程中的一个自然终点。这个终止条件保证了每次递归都在向着基本情况靠近,最终能够停止递归调用。
🦆
递归解法中,如果二叉树非常大,是否有可能导致栈溢出?如果是,有什么可能的解决方案?
是的,如果二叉树非常大或极其偏斜(例如,所有节点都只有一个子节点),递归解法可能会导致调用栈过深,从而引发栈溢出的问题。解决这个问题的一个方法是使用迭代方法,如层次遍历(利用队列),通过这种方式可以避免深层的递归调用,从而减少栈空间的使用。
🦆
在实际编码中,如何确认递归调用正确地更新了每个节点的深度?是否有测试或验证的方法?
在实际编码中,可以通过编写单元测试来验证递归调用是否正确地更新了每个节点的深度。例如,可以为不同形状和大小的二叉树准备测试用例,包括完全二叉树、偏斜树和空树等,然后检查函数的输出是否与预期的树的最大深度相匹配。这样可以系统地检查和确认递归逻辑的正确性。

相关问题

平衡二叉树

给定一个二叉树,判断它是否是 平衡二叉树  

 

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

 

提示:

  • 树中的节点数在范围 [0, 5000]
  • -104 <= Node.val <= 104

二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

 

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

 

提示:

  • 树中节点数的范围在 [0, 105]
  • -1000 <= Node.val <= 1000

N 叉树的最大深度

给定一个 N 叉树,找到其最大深度。

最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

 

示例 1:

输入:root = [1,null,3,2,4,null,5,6]
输出:3

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5

 

提示:

  • 树的深度不会超过 1000
  • 树的节点数目位于 [0, 104] 之间。