二叉树题目:二叉树的最大深度

news2024/10/6 2:21:24

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法一
    • 思路和算法
    • 代码
    • 复杂度分析
  • 解法二
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:二叉树的最大深度

出处:104. 二叉树的最大深度

难度

3 级

题目描述

要求

给定一个二叉树,返回其最大深度。

二叉树的最大深度是从根结点到最远叶结点的最长路径上的结点数。

示例

示例 1:

示例 1

输入: root   =   [3,9,20,null,null,15,7] \texttt{root = [3,9,20,null,null,15,7]} root = [3,9,20,null,null,15,7]
输出: 3 \texttt{3} 3

示例 2:

输入: root   =   [1,null,2] \texttt{root = [1,null,2]} root = [1,null,2]
输出: 2 \texttt{2} 2

数据范围

  • 树中结点数目在范围 [0,   10 4 ] \texttt{[0, 10}^\texttt{4}\texttt{]} [0, 104]
  • -100 ≤ Node.val ≤ 100 \texttt{-100} \le \texttt{Node.val} \le \texttt{100} -100Node.val100

解法一

思路和算法

如果二叉树为空,则深度为 0 0 0。对于非空二叉树,首先计算左子树和右子树的最大深度,两者的最大值加 1 1 1 即为二叉树的最大深度,左子树和右子树的最大深度可以使用同样的方式计算。因此可以使用深度优先搜索计算二叉树的最大深度。

计算二叉树的最大深度的过程是一个递归的过程,递归的终止条件是二叉树为空,此时二叉树的最大深度为 0 0 0。对于非空二叉树,首先递归地计算左子树和右子树的最大深度,然后将两者的最大值加 1 1 1 即为二叉树的最大深度。

代码

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是递归调用的栈空间,取决于二叉树的高度,最坏情况下二叉树的高度是 O ( n ) O(n) O(n)

解法二

思路和算法

也可以使用广度优先搜索计算二叉树的最大深度。

广度优先搜索需要使用队列存储待访问的结点,初始时将根结点入队列。最简单的广度优先搜索的做法是,每次将一个结点出队列,然后将该结点的非空子结点入队列,直到队列为空时遍历结束。

这道题需要计算二叉树的最大高度,因此在广度优先搜索的过程中需要维护深度的信息,实现和最简单的广度优先搜索有所不同。为了维护深度信息,需要确保每一轮访问的结点为同一层的全部结点。

初始时,队列内只有根结点,是同一层的全部结点。每一轮访问结点之前需要首先得到队列内的元素个数,此时队列内的元素为同一层的全部结点,然后访问这些结点,并将这些结点的非空子结点入队列。一轮访问结束之后,当前层的全部结点都已经出队列并被访问,此时队列内的元素为下一层的全部结点,下一轮访问时即可访问下一层的全部结点。使用上述做法,可以确保每一轮访问的结点为同一层的全部结点。

在确保每一轮访问的结点为同一层的全部结点的情况之下,根据访问的总轮数即可得到二叉树的最大深度,其中根结点的深度为 1 1 1

代码

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int depth = 0;
        Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            depth++;
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }
        return depth;
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是队列空间,队列内元素个数不超过 n n n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(ceph)CephFS 文件系统 MDS接口

创建 CephFS 文件系统 MDS 接口 //服务端操作 1&#xff09;在管理节点创建 mds 服务 cd /etc/ceph ceph-deploy mds create node01 node02 node032&#xff09;查看各个节点的 mds 服务 ssh rootnode01 systemctl status ceph-mdsnode01 ssh rootnode02 systemctl status cep…

定时器处理非活动连接(五)

1 基础知识 非活跃&#xff0c;是指客户端&#xff08;这里是浏览器&#xff09;与服务器端建立连接后&#xff0c;长时间不交换数据&#xff0c;一直占用服务器端的文件描述符&#xff0c;导致连接资源的浪费。 非活跃&#xff0c;是指固定一段时间之后触发某段代码&#xf…

学习率的选择

学会画图去看学习率是否符合 梯度下降算法收敛所需要的迭代次数根据模型的不同而不同&#xff0c;我们不能提前预知&#xff0c;我们可以绘制迭代次数和代价函数的值的图表来观测算法在何时趋于收敛。 -自动测试方法 也有一些自动测试是否收敛的方法&#xff0c;例如将代价函数…

python_day9_继承

继承 单继承 class Phone:id Noneproducer "HW"def call_4g(self):print("4g通话")class Phone2023(Phone):face_id "1001"def call_45g(self):print("4.5g")phone Phone2023() print(phone.producer) phone.call_4g() phone.ca…

Leetcode-每日一题【109.有序链表转换二叉搜索树】

题目 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: head [-10,-3,0,5,9]输出: [0,-3,9,-…

【Linux基础】gcc编译器

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

【IMX6ULL - psplash应用】修改uboot启动阶段的背景颜色

文件路径&#xff1a;psplash/psplash-colors.h 修改框起来的这两个宏定义就可以改变底部颜色了&#xff0c;参数代表是RGB的16进制颜色

Linux 支持 U盘 NTFS 文件系统格式

Linux 支持 U盘 NTFS 文件系统格式 1、在线&#xff08;可以连接外网&#xff09;方式&#xff1a; 1.1、RHEL/CentOS/Anolis/openEuler yum install ntfs-3g1.2、Debian/Ubuntu/Deepin apt install ntfs-3g2、离线方式 下载 ntfs-3g 安装包&#xff0c;离线环境安装 ntfs…

算法通关村第一关--链表青铜挑战笔记

算法通关村第一关–链表青铜挑战笔记 开始时间&#xff1a;2023年7月16日20:45:26 链表 什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#x…

解决通过request.getParam()方法获取到的值为null的问题~

我们想获取前端表单提交的数据&#xff0c;并在控制台输出&#xff0c;但如下所示控制台输出的值均为null 原因在于&#xff1a; 表单中的name与getParam方法中名称不一致的问题 如下所示为表单内容&#xff1a; 而在getParam方法中我们是根据username和password获取的&#…

【LLM】Langchain使用[四](评估、代理)

note 评估目的&#xff1a;检验LLM是否达到验收标准&#xff1b;分析改动对于LLM应用性能的影响 思路&#xff1a;利用语言模型和链&#xff0c;辅助评估 代理&#xff1a; 代理能方便地将LLM连接自己的信息来源&#xff08;数据&#xff09;、API等PythonREPLTool工具&#x…

WSL2安装CUDA

WSL2安装CUDA 在WSL里面不用安装显卡驱动&#xff0c;显卡驱动必须要提前在Windows系统里面安装好&#xff0c;安装好后相应库文件会自动映射到WSL里面 进入网站 找到自己需要的版本&#xff0c;我这里是CUDA 11.7.1&#xff0c;点击进入详细页面 依次选择 L i n u x → x 86…

IP扫描工具

什么是高级 IP 扫描仪 高级 IP 扫描程序是网络中必不可少的工具&#xff0c;使管理员能够跟踪网络地址空间。在提供要扫描的 IP 地址范围时&#xff0c;高级 IP 扫描程序会借助网络扫描协议按顺序检查该范围内的每个 IP&#xff0c;扫描后&#xff0c;高级 IP 扫描程序工具可查…

【MongoDB实战】数据备份与恢复

场景&#xff1a; 需求&#xff1a; 解决方案&#xff1a; 步骤&#xff1a; Stage 1&#xff1a;【生产环境】修改备份文件映射 Stage 2&#xff1a;【生产环境】重新构建mongodb Stage 3&#xff1a;【客户环境】修改备份文件映射&#xff0c;同 Stage 1 Stage 4&#…

python接口自动化(四十)- logger 日志 - 下(超详解)

简介 按照上一篇的计划&#xff0c;这一篇给小伙伴们讲解一下&#xff1a;&#xff08;1&#xff09;多模块使用logging&#xff0c;&#xff08;2&#xff09;通过文件配置logging模块&#xff0c;&#xff08;3&#xff09;自己封装一个日志&#xff08;logging&#xff09;类…

Stable Diffusion配置要求,显卡推荐

Stable Diffusion 是一款流行的人工智能图像生成器&#xff0c;您可以在自己的 PC 上运行。但是运行Stable Diffusion的最低规格是多少&#xff0c;哪些组件最重要&#xff1f; Stable Diffusion需要什么 PC 硬件&#xff1f; Stable Diffusion最关键的一个组件是显卡 (GPU)。…

LaTex 中的Beamer使用

LaTex 中的Beamer使用 Beamer beamer 中通过frame 来控制每一页的内容&#xff0c;其与编写常用的LaTex文稿基本没有区别 titlepage \title[Short Title]{My Presentation} \subtitle{An Introduction to LaTeX Beamer} \author{River Chandler} \institute{Sichuan Universi…

国科大杭州高等研究院

2021年底的我还没决定开始考研 &#xff0c;过完年才确定开始考研&#xff0c;开学以后才开始学习&#xff0c;此时距离22年底考试时间差不多十个月的样子。 2022年开始正式学习&#xff0c;2 2 408&#xff0c;对于我来说内容挺多挺难的&#xff0c;我英语不太好&#xff0c;以…

懒人自动化生成e2e测试文件:JSON => playwright

前言 本工具实现的是&#xff1a;使用简单的 JSON 配置&#xff0c;生成可执行的 playwright UI 测试文件。 然后通过项目内已经配置好的 playwright 配置实现 UI 测试。 工具工作流程&#xff1a; 期望达到的目的是&#xff1a; ✅ 基础页面&#xff08;进入页面&#xff0…

加密保SSL超安通配版

今天收到几家公司网络IT经理询问&#xff1a;“要买“加密保SSL超安通配版”问有没有&#xff1f;” 这里特别强调一下&#xff01; “加密保SSL超安通配版”这不是国产SSL证书&#xff0c;不是国产SSL证书&#xff0c;属于套牌PKI类型非CA机构官方产品&#xff01; 这是经销…