104. 二叉树的最大深度

深度优先遍历 DFS

图解

一个树的最大深度 = 根节点的高度 + 左右子树的最大深度中的较大者

复杂度

  1. 时间复杂度:O(n),其中 n 为二叉树节点的个数,每个节点在递归中只被遍历一次;

  2. 空间复杂度:O(height),其中 height 表示二叉树的高度,递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度;

    • 在平均情况下,二叉树的高度与节点个数为对数关系,即 O(logN)
    • 而在最坏情况下,树形成链状,空间复杂度为 O(N)

代码实现

var maxDepth = (root) => {
    // 终止条件
    if (root === null) return 0;

    let leftDepth = maxDepth(root.left);
    let rightDepth = maxDepth(root.right);

    return Math.max(leftDepth, rightDepth) + 1;
};

广度优先遍历 BFS

解题思路

  1. 使用层序遍历二叉树,因为最大的深度就是二叉树的层数;

  2. 在二叉树中,一层一层的来遍历二叉树,记录一下遍历的层数就是二叉树的深度;

图解

复杂度

  1. 时间复杂度:O(n)n 是二叉树节点数目,每个节点会被遍历一次;

  2. 空间复杂度:O(n)

代码实现

var maxDepth = (root) => {
    if (root === null) return 0;

    let queue = [root]; // 队列
    let maxDepth = 0;

    while (queue.length) {
        let len = queue.length;
        while (len--) {
            let node = queue.shift();
            if (node.left) queue.push(node.left);
            if (node.right) queue.push(node.right);
        }
        maxDepth++;
    }

    return maxDepth;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 深度优先遍历 DFS
    1. 1.1. 图解
    2. 1.2. 复杂度
    3. 1.3. 代码实现
  2. 2. 广度优先遍历 BFS
    1. 2.1. 解题思路
    2. 2.2. 图解
    3. 2.3. 复杂度
    4. 2.4. 代码实现