37.二叉树的最大深度

题目链接

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

解法1 递归dfs

思路

像二叉树的一些题目都可以用递归的思路去解题。

递归首先想到的是停止条件,如果当前节点没有左右子树,那么深度为 1 直接返回即可。

接下来对左子树和右子树递归计算深度,返回时返回左右子树中最大的高度再加上这一层的高度 1 即可。

代码

js 复制代码
function maxDepth(root: TreeNode | null): number {
    if (!root) {
        return 0;
    }
    if (!root.left && !root.right) {
        return 1;
    }
    const left = root.left ? maxDepth(root.left) : 0;
    const right = root.right ? maxDepth(root.right) : 0;

    return Math.max(left, right) + 1;
};

时空复杂度

时间复杂度:O(n)

空间复杂度:平均O(h) ,h 是树的高度。最差退化为单链表 栈空间为 O(n)

解法2 层序遍历bfs

思路

将每一层的子节点放入队列中,逐个遍历,最大深度自增。

代码

js 复制代码
function maxDepth(root: TreeNode | null): number {
    if (root === null) return 0;

    let queue: TreeNode[] = [root];
    let depth = 0;

    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)

空间复杂度:O(n)

相关推荐
牧艺几秒前
cos-design 4.0:91 个特效组件一次捅成 React / Vue / Web Components / Core
前端·vue.js·web components
沙蒿同学几秒前
Wails v2 实战:用 Go + Vue3 做一个真正能用的 AI 桌面应用
前端·javascript·后端
某亿几秒前
为什么我放弃了 esbuild,改用 typescript 包做运行时编译
前端·electron
Blanche15001 分钟前
优化 RAG 应用提升问答准确度
前端
颜进强1 分钟前
09 · NestJS Middleware 中间件:链路最外层那个"最像 Express"的家伙
前端·后端·ai编程
创新技术阁1 分钟前
FastapiAdmin 实战:演示模式开关失效的排查记录
前端·后端·fastapi
拖孩1 分钟前
一个人 + AI 做的小程序,一个半月把服务器钱赚回来一半了
前端·后端·微信小程序
风骏时光牛马2 分钟前
后端服务接口开发与业务逻辑实现
前端
编程老船长2 分钟前
权限不只是菜单按钮——QuickBlue 的 RBAC 与行级数据权限是怎么落地的
java·前端·后端
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent