简单
二叉树的最大深度
二叉树DFSBFSLeetCode 104
相关算法文章:
题目描述
给定二叉树根节点 root,返回其最大深度。
最大深度:从根节点到最远叶子节点的最长路径上的节点数。
示例
示例 1:
输入: root = [3, 9, 20, null, null, 15, 7]
3
/ \
9 20
/ \
15 7
输出: 3
示例 2:
输入: root = [1, null, 2]
输出: 2
示例 3:
输入: root = []
输出: 0
示例 4:
输入: root = [0]
输出: 1
解题思路
DFS 递归:当前树的最大深度等于左子树和右子树最大深度的较大值再加 1(根节点自身)。递归终止条件是空节点返回 0。
BFS 迭代:层序遍历,每遍历完一层深度加 1,遍历完所有层后得到的深度即为最大深度。
代码实现
/**
* 方法一:DFS 递归版
* @param {TreeNode} root - 二叉树根节点
* @returns {number} 最大深度
*/
function maxDepthDFS(root) {
if (!root) return 0;
return Math.max(maxDepthDFS(root.left), maxDepthDFS(root.right)) + 1;
}
/**
* 方法二:BFS 迭代版(层序遍历)
* @param {TreeNode} root - 二叉树根节点
* @returns {number} 最大深度
*/
function maxDepthBFS(root) {
if (!root) return 0;
let depth = 0;
const queue = [root];
while (queue.length > 0) {
const levelSize = queue.length;
for (let i = 0; i < levelSize; i++) {
const node = queue.shift();
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
depth++;
}
return depth;
}
复杂度分析
- 时间复杂度:O(n),每个节点访问一次。
- 空间复杂度:DFS 为 O(h)(递归栈深度),h 为树高;BFS 为 O(w)(队列宽度),w 为树的最大宽度。最坏情况均为 O(n)。
示例输入 / 输出
下面给出一组输入输出示例,便于对照题意与结果。
编号 max-depth难度 简单
输入
root = [3,9,20,null,null,15,7]
输出
3