当前位置: 首页 > news >正文

刷题日常 5 二叉树最大深度

方法一:深度优先搜索
思路与算法

如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为

max(l,r)+1
而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。


1 / 10
C++
Java
Python
Golang
C
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == nullptr) return 0;
        return max(maxDepth(root->left), maxDepth(root->right)) + 1;
    }
};
复杂度分析

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

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

方法二:广度优先搜索
思路与算法

我们也可以用「广度优先搜索」的方法来解决这道题目,但我们需要对其进行一些修改,此时我们广度优先搜索的队列里存放的是「当前层的所有节点」。每次拓展下一层的时候,不同于广度优先搜索的每次只从队列里拿出一个节点,我们需要将队列里的所有节点都拿出来进行拓展,这样能保证每次拓展完的时候队列里存放的是当前层的所有节点,即我们是一层一层地进行拓展,最后我们用一个变量 ans 来维护拓展的次数,该二叉树的最大深度即为 ans。

C++
Java
Golang
C
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == nullptr) return 0;
        queue<TreeNode*> Q;
        Q.push(root);
        int ans = 0;
        while (!Q.empty()) {
            int sz = Q.size();
            while (sz > 0) {
                TreeNode* node = Q.front();Q.pop();
                if (node->left) Q.push(node->left);
                if (node->right) Q.push(node->right);
                sz -= 1;
            }
            ans += 1;
        } 
        return ans;
    }
};
复杂度分析

时间复杂度:O(n),其中 n 为二叉树的节点个数。与方法一同样的分析,每个节点只会被访问一次。

空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)。

http://www.dtcms.com/a/597499.html

相关文章:

  • 信刻创新型近线+离线安全存储归档策略,保障电子档案全生命周期管理
  • Flutter for HarmonyOS开发指南(九):测试、调试与质量保障体系
  • 北京云主机网站源码做游戏网站要多少钱
  • 深圳自建站有哪些大公司邯郸企业网站建设价格
  • 项目分享| LocalAI-master:本地部署的OpenAI替代方案
  • 2.多线程进阶
  • 建湖网站定制重庆网站建设齐重庆零臻科技
  • 网站策划的内容wordpress3.8 中文标签
  • Rust评测案例:Rust、Java、Python、Go、C++ 实现五大排序算法的执行时间效率比较(基于 OnlineGDB 平台)
  • golang redis 管道
  • go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持
  • ⚡️2025-11-11GitHub日榜Top5|Go AI代理开发框架
  • 网站建设g如何做设计网站页面
  • 智能推荐助力数据驱动决策模式提升效率
  • 博客系统 wordpressseo公司怎么样
  • 网站建设与管理 期末软件库资源共享
  • NetSonar网络诊断工具的安装与基本使用
  • 各国网站域名桂林市区有什么好玩的地方景点
  • 陕西省两学一做网站深圳今天新闻头条
  • Git Commend HandBook
  • MFC:微软基础类库的全面解析
  • 郑州网站建设技术托管营销推广方法有哪些
  • Python工具将本地Embedding转换成onnx格式
  • 手机类网站设计赣州新闻综合频道回放
  • 嘉兴网站免费制作判断网站开发语言
  • JSF是什么
  • vscode 设置中文-语言
  • flutter vscode 终端无法使用fvm 版本切换、项目运行
  • 数据结构:计算机高效处理数据的核心基石
  • 网站怎么做能赚钱吗溧水做网站