【每日一题】LeetCode 104.二叉树的最大深度(树、深度优先搜索、广度优先搜索、二叉树)
题目描述
给定一个二叉树 root
,我们需要计算并返回该二叉树的最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。
思路分析
为了解决这个问题,我们可以使用递归的方法。递归的基本思想是从根节点开始,逐层向下遍历树的每个节点,同时记录当前的深度。在递归的过程中,我们会遇到两种情况:
- 当前节点为
null
,说明已经到达了树的末端,此时应该返回当前的深度(减去1,因为末端节点不计入深度)。 - 当前节点不为
null
,此时我们需要分别递归地计算左子树和右子树的最大深度,然后取两者的最大值作为当前节点的最大深度。
递归的终止条件是遇到 null
节点,此时返回深度为0。
输入示例
-
示例 1:
- 输入:
root = [3,9,20,null,null,15,7]
- 输出:
3
- 输入:
-
示例 2:
- 输入:
root = [1,null,2]
- 输出:
2
- 输入:
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
// 调用递归函数,初始深度为1(根节点)
return dfs(root, 1);
}
/**
* 递归计算二叉树的最大深度
* @param node 当前节点
* @param depth 当前深度
* @return 当前节点的最大深度
*/
public static int dfs(TreeNode node, int depth) {
// 如果当前节点为null,返回当前深度减去1(因为null节点不计入深度)
if (node == null) {
return depth - 1;
}
// 递归计算左子树的最大深度,并增加当前深度
int leftDepth = dfs(node.left, depth + 1);
// 递归计算右子树的最大深度,并增加当前深度
int rightDepth = dfs(node.right, depth + 1);
// 返回左子树和右子树深度的最大值
return Math.max(leftDepth, rightDepth);
}
}