文章目录
- 1. 题目链接
- 2. 题目描述
- 3. 题目示例
- 4. 解题思路
- 5. 题解代码
- 6. 复杂度分析
1. 题目链接
104. 二叉树的最大深度 - 力扣(LeetCode)
2. 题目描述
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
3. 题目示例
示例 1 :
输入:root = [3,9,20,null,null,15,7]
输出:3
示例 2 :
输入:root = [1,null,2]
输出:2
4. 解题思路
- 递归DFS遍历:
- 采用深度优先搜索(DFS)策略
- 从根节点开始向下递归遍历每个节点
- 深度计算:
- 每进入一个非空节点,当前深度+1
- 使用全局变量
ans
记录遍历过程中遇到的最大深度
- 递归终止:
- 遇到空节点时返回(递归基线条件)
- 非空节点继续向左右子树递归
- 关键点:
- 前序遍历顺序(先处理当前节点,再处理子树)
- 深度参数在递归调用中传递
- 全局变量记录最大值
5. 题解代码
class Solution {
private int ans; // 存储最大深度结果
public int maxDepth(TreeNode root) {
dfs(root, 0); // 从根节点开始深度优先搜索,初始深度为0
return ans; // 返回最大深度
}
// 递归深度优先搜索方法
private void dfs(TreeNode node, int depth) {
if (node == null) return; // 基线条件:空节点返回
depth++; // 当前节点深度+1
ans = Math.max(ans, depth); // 更新最大深度
// 递归处理左右子树
dfs(node.left, depth);
dfs(node.right, depth);
}
}
6. 复杂度分析
- 时间复杂度:O(n)
- 每个节点恰好被访问一次
- n为树中节点总数
- 空间复杂度:O(h)
- 递归调用栈的深度等于树的高度h
- 最坏情况下(链表状树)为O(n)
- 平衡二叉树情况下为O(log n)