【leetcode】104. 二叉树的最大深度

106 阅读1分钟

leetcode-104.png

其实这一题没啥好说的,主要是由这一题引申到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
};