首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcod刷题(14)——104. 二叉树的最大深度

Leetcod刷题(14)——104. 二叉树的最大深度

作者头像
老马的编程之旅
发布于 2022-06-22 06:18:07
发布于 2022-06-22 06:18:07
21700
代码可运行
举报
文章被收录于专栏:深入理解Android深入理解Android
运行总次数:0
代码可运行

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  	3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

我的解法: 采用递归思路,根节点的层次,等于左子树和右子树中最大的深度+1,一直递归到叶子节点结束即可,叶子节点的深度是1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null&&root.right==null){
            return 1;
        }
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        return leftDepth>rightDepth?leftDepth+1:rightDepth+1;
    }
}

解法2: 深度优先算法 只需要辅助记录一下左右子树所在的层级即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import javafx.util.Pair;
import java.lang.Math;

class Solution {
  public int maxDepth(TreeNode root) {
    Queue<Pair<TreeNode, Integer>> stack = new LinkedList<>();
    if (root != null) {
      stack.add(new Pair(root, 1));
    }

    int depth = 0;
    while (!stack.isEmpty()) {
      Pair<TreeNode, Integer> current = stack.poll();
      root = current.getKey();
      int current_depth = current.getValue();
      if (root != null) {
        depth = Math.max(depth, current_depth);
        stack.add(new Pair(root.left, current_depth + 1));
        stack.add(new Pair(root.right, current_depth + 1));
      }
    }
    return depth;
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Leetcode 104. 二叉树的最大深度
二叉树根节点为空,则树高度为 0,根节点不为空,则高度为左子树、右子树的最大值加一。
zhipingChen
2019/05/24
4440
【小Y学算法】⚡️每日LeetCode打卡⚡️——28.二叉树的最大深度
具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。
呆呆敲代码的小Y
2021/09/10
2670
【小Y学算法】⚡️每日LeetCode打卡⚡️——28.二叉树的最大深度
【Leetcode】104. 二叉树的最大深度
求最大深度,和深度相关,我们很容易想到用层序遍历。每遍历一层,就深度加1, 怎么记录是第几层我们之前的文章中讲过了。
Leetcode名企之路
2019/03/11
3770
打卡群2刷题总结1012——二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
木又AI帮
2020/10/30
3060
104 二叉树最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
木瓜煲鸡脚
2021/01/18
4200
104 二叉树最大深度
leetcode刷题(50)——111. 二叉树的最小深度
方法1:递归 对比求最大深度,只有一个地方需要注意,那就是如果左右子树有一边为null而另一边不为null,最小深度不是0+1,而是另一个不为null子树的最小深度+1
老马的编程之旅
2022/06/22
1810
​LeetCode刷题实战104:二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
程序员小猿
2021/01/19
2780
​LeetCode刷题实战104:二叉树的最大深度
leetcode 104. 二叉树的最大深度 js实现
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 原题 /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val
蓓蕾心晴
2022/11/29
3760
每天一道leetcode-104.二叉树的最大深度
今天的题目 每天的题目见github(看最新的日期): https://github.com/gzc426
乔戈里
2019/09/17
2950
每天一道leetcode-104.二叉树的最大深度
【Leetcode -100.相同的树 -104.二叉树的深度】
题目:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
YoungMLet
2024/03/01
1040
【Leetcode -100.相同的树 -104.二叉树的深度】
二叉树的最大深度
使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。
用户11097514
2024/05/30
820
图解精选 TOP 面试题 002 | LeetCode 104. 二叉树的最大深度
题目要求求出二叉树的最大深度,我们知道,每个节点的深度与它左右子树的深度有关,且等于其左右子树最大深度值加上 1,可以写作:
帅地
2019/12/05
4320
图解精选 TOP 面试题 002 | LeetCode 104. 二叉树的最大深度
LeetCode 104: 二叉树的最大深度 Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth.
爱写bug
2020/02/18
4490
漫画:二叉树系列 第一讲(最大深度与DFS)
在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。树比链表稍微复杂,因为链表是线性数据结构,而树不是。树的问题很多都可以由广度优先搜索或深度优先搜索解决。
程序员小浩
2020/03/31
6790
104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 解: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeN
张伦聪zhangluncong
2022/10/26
2130
画解算法:104. 二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
灵魂画师牧码
2019/06/27
5590
画解算法:104. 二叉树的最大深度
leetcode树之二叉树的深度
这里采用递归的方式,递归计算maxDepth(root.left)及maxDepth(root.right),最后取它们的最大值+1。
code4it
2020/09/27
2890
leetcode树之二叉树的深度
【数据结构】翻转、平衡、对称二叉树,最大深度、判断两棵树是否相等、另一棵树的子树
若要让时间复杂度为O(n),则需要在判断的过程中,只要发现左右俩树高度相差大于 1,就直接 return -1,不再进行后续判断了
椰椰椰耶
2024/10/15
1280
【数据结构】翻转、平衡、对称二叉树,最大深度、判断两棵树是否相等、另一棵树的子树
LeetCode-104-二叉树的最大深度
DFS左子树深度,DFS右子树深度,树的深度=Max(左子树,右子树)+root节点
benym
2022/07/14
2070
二叉树——104. 二叉树的最大深度
方法一:深度优先搜索 如果我们知道了左子树和右子树的最大深度Ⅰ和r,那么该二叉树的最大深度即为 max(l, r)+1 而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在O(1)时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。 复杂度分析 时间复杂度:O(n),其中n为二叉树节点的个数。每个节点在递归中只被遍历一次。 空间复杂度:O(height),其中height表示二叉树的高度。递归函数需要栈空间,而栈空间取决于递归的深度,因此空间复杂度等价于二叉树的高度。 方法二:广度优先搜索 我们也可以用「广度优先搜索」的方法来解决这道题目,但我们需要对其进行—些修改,此时我们广度优先搜索的队列里存放的是「当前层的所有节点」。每次拓展下一层的时候,不同于广度优先搜索的每次只从队列里拿出一个节点,我们需要将队列里的所有节点都拿出来进行拓展,这样能保证每次拓展完的时候队列里存放的是当前层的所有节点,即我们是一层一层地进行拓展,最后我们用一个变量ans来维护拓展的次数,该二叉树的最大深度即为ans。 复杂度分析 ·时间复杂度:O(n),其中n为二叉树的节点个数。与方法一同样的分析,每个节点只会被访问一次。 ·空间复杂度:此方法空间的消耗取决于队列存储的元素数量,其在最坏情况下会达到O(n)。
向着百万年薪努力的小赵
2022/12/02
2930
二叉树——104. 二叉树的最大深度
推荐阅读
相关推荐
Leetcode 104. 二叉树的最大深度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验