其实这一题没啥好说的,主要是由这一题引申到543题
这里来计算最大深度,每次都是 +1即可
- 如果当前节点为空(即为
null),那么树的深度为 0。 - 如果当前节点不为空,递归地计算其左子树和右子树的最大深度,然后取两者的最大值,再加上当前节点的深度(即
1)。
DFS
var maxDepth = function(root) {
if (!root) {
return 0; // 空节点的深度为 0
}
// 递归计算左子树和右子树的最大深度
let leftDepth = maxDepth(root.left);
let rightDepth = maxDepth(root.right);
// 当前节点的最大深度为左右子树深度的最大值加 1
return Math.max(leftDepth, rightDepth) + 1;
};
var maxDepth = function (root) {
if (!root) return 0
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};
- 时间复杂度: O(N),其中
N是二叉树的节点数量,每个节点都遍历一次。 - 空间复杂度: O(H),
H是二叉树的高度,递归调用的最大深度取决于树的高度。在 平衡二叉树 中,H ≈ logN,在 链式树(退化为链表)情况下,H ≈ N。
BFS
BFS 的模版就如下面这样,使用队列来进行每一层的遍历,出队 + 入队 = 下一层的节点
var maxDepth = function (root) {
if (!root) return 0
let queue = [root]
let depth = 0
while (queue.length) {
let size = queue.length
depth++
for (let i = 0; i < size; ++i) {
let current = queue.shift()
if (current.left) queue.push(current.left)
if (current.right) queue.push(current.right)
}
}
return depth
};