目录
  1. 1. Leetcode104:二叉树的最大深度
    1. 1.0.1. 题解
      1. 1.0.1.1. 方法一:递归
        1. 1.0.1.1.1. 思路与算法
        2. 1.0.1.1.2. 复杂度分析
      2. 1.0.1.2. 方法二:广度优先搜索
Leetcode104:二叉树的最大深度

Leetcode104:二叉树的最大深度

题目描述:

给定一个二叉树,找出其最大深度。
二叉树的最大深度为根节点到最远叶子节点的最长路径上的节点数。

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

示例:

给定二叉树

1
[3, 9, 20, null, null, 15, 7]
1
2
3
4
5
  3
/ \
9 20
/ \
15 7

返回它的最大深度3。

题解

方法一:递归

思路与算法

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

1
max(l, r) + 1

而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在O(1)时间内计算出当前二叉树的最大深度。递归在访问到空节点是退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
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(heigh), 其中height表示二叉树的高度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。

    方法二:广度优先搜索

    我们也可以用广度优先搜索的方法来解决这些题目,但我们需要对其进行一些修改,此时我们BFS的队列里「当前层的所有节点」。每次拓展下一层的时候,不同于BFS的每次只从队列里拿出一个节点,我们需要将队列里的所有节点都拿出来进行扩展,这样能保证每次拓展完的时候队列里存放的是当前层的所有节点,即我们是一层一层的进行拓展,最后我们用一个变量ans来维护拓展的次数, 该二叉树的最大深度即为ans。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
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;
}
};
文章作者: XyLan
文章链接: https://blog.xylan.cn/2023/04/26/Leetcode104%EF%BC%9A%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XyLan
打赏
  • 微信
  • 支付寶