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)

相关推荐
橙光成长19 分钟前
PDF离线工具箱深度解析:4MB纯前端单文件,40+功能全本地运行,文件绝不上传
前端·pdf·1024程序员节
小poop7 小时前
CSS 基础与实战:从入门到精通网页美化
前端
Csvn8 小时前
运行时性能
前端
Never_every999 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck9 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖10 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
?abc!10 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
欣欣之王来了12 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒12 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师12 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端