104. 二叉树的最大深度
创始人
2025-05-31 17:21:16
0

总结

求解二叉树的最大深度:

  1. 深度优先搜索
  2. 广度优先搜索

给定一个二叉树,找出其最大深度。

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

说明: 叶子节点是指没有子节点的节点。

示例1:

给定二叉树 [3,9,20,null,null,15,7]

    3/ \9  20/  \15   7

返回它的最大深度 3 。

方法一:深度优先搜索 DFS

思路与算法

左子树和右子树的最大深度lll 和rrr,那么该二叉树的最大深度即为
max(l,r)+1max(l,r)+1 max(l,r)+1
深度优先搜索:

  1. 递归计算出其左子树和右子树的最大深度
  2. 在O(1)O(1)O(1)时间内计算出当前二叉树的最大深度
  3. 递归在访问到空节点时退出
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {if(root==nullptr) return 0;return max(maxDepth(root->left),maxDepth(root->right))+1;}
};
复杂度分析
  • 时间复杂度:O(n)O(n)O(n),其中n为二叉树节点的个数。每个节点在递归中只被遍历一次。
  • 空间复杂度:O(height)O(height)O(height),其中 height表示二叉树的高度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。

方法二:广度优先搜索 BFS

思路与算法

广度优先搜索的队列里存放的是「当前层的所有节点」。

每次拓展下一层的时候,不同于广度优先搜索的每次只从队列里拿出一个节点,需要将队列里的所有节点都拿出来进行拓展,这样能保证每次拓展完的时候队列里存放的是当前层的所有节点,即是一层一层地进行拓展,最后用一个变量ans来维护拓展的次数,该二叉树的最大深度即为ans。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {if(root==nullptr) return 0;queue 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)O(n)O(n),其中n为二叉树节点的个数。每个节点只被访问一次。
  • 空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到 O(n)O(n)O(n)。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...