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

网站建设空间是否续费/企业网络规划设计方案

网站建设空间是否续费,企业网络规划设计方案,百度云盘做网站,企业高端网站建设美工104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3…

104. 二叉树的最大深度

已解答

简单

相关标签

相关企业

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

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

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100

 方法一:后序遍历(DFS)

思路

  1. 使用递归方法计算二叉树的最大深度。
  2. 二叉树的最大深度可以表示为:
    • 如果节点为空(即 root == None),那么深度为 0。
    • 否则,树的最大深度为左子树和右子树的最大深度加 1。
  3. 递归地计算左右子树的深度,并返回它们的最大值加 1。
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {if (root == null ){return 0;}else{return Math.max(maxDepth(root.left),maxDepth(root.right))+1;}}
}

思路与算法

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

max(l,r)+1

复杂度分析

  • 时间复杂度:O(N),其中 N 是二叉树中的节点数。因为我们每个节点都需要访问一次。
  • 空间复杂度:O(H),其中 H 是二叉树的高度。在最坏情况下(树完全倾斜),递归栈的深度可能会达到树的高度。

示例

对于输入 root = [3,9,20,null,null,15,7]

  1. 根节点 3 的左子树深度为 1,右子树深度为 2。
  2. 因此,最大深度为 2 + 1 = 3
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def maxDepth(self, root: Optional[TreeNode]) -> int:# 如果节点为空,深度为 0if root is None:return 0# 递归求左右子树的深度left_depth = self.maxDepth(root.left)right_depth = self.maxDepth(root.right)# 返回左右子树较大深度加 1return max(left_depth, right_depth) + 1

方法 2:迭代 DFS(使用栈)

可以用栈来实现 DFS,从根节点开始,将每个节点和对应的深度存入栈中,然后更新最大深度。

代码如下:

class Solution:def maxDepth(self, root: Optional[TreeNode]) -> int:# 特殊情况处理if root is None:return 0# 使用栈来进行 DFS,每个元素是 (节点, 深度)stack = [(root, 1)]max_depth = 0# 开始 DFSwhile stack:node, depth = stack.pop()if node:# 更新最大深度max_depth = max(max_depth, depth)# 将左右子节点及其深度加入栈stack.append((node.left, depth + 1))stack.append((node.right, depth + 1))return max_depth

方法二:层序遍历(BFS)

树的层序遍历 / 广度优先搜索往往利用 队列 实现。

关键点: 每遍历一层,则计数器 +1 ,直到遍历完成,则可得到树的深度。

在计算二叉树的最大深度时,我们也可以使用广度优先搜索(BFS)来实现。BFS 会按层遍历二叉树,因此每遍历完一层,深度就增加 1。使用 BFS 的优点是,它逐层访问节点,可以在找到最远叶子节点时直接得出最大深度。

  1. 从根节点开始,将其加入队列,并初始化深度为 0。
  2. 每一层的节点都会被处理,并在遍历该层的所有节点后,深度增加 1。
  3. 当队列为空时,说明所有层都遍历完了,此时的深度就是树的最大深度。

代码实现

以下是 BFS 的实现代码,使用 Python 的 collections.deque 来实现队列操作:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def maxDepth(self, root: Optional[TreeNode]) -> int:# 如果根节点为空,直接返回深度 0if root is None:return 0# 初始化队列并将根节点加入队列queue = deque([root])depth = 0# 开始 BFSwhile queue:# 每一层的节点数量level_size = len(queue)# 处理当前层的所有节点for _ in range(level_size):node = queue.popleft()# 将子节点加入队列if node.left:queue.append(node.left)if node.right:queue.append(node.right)# 当前层处理完,深度加 1depth += 1return depth

复杂度分析

  • 时间复杂度:O(N),其中 N 是节点数。每个节点访问一次。
  • 空间复杂度:O(W),其中 W 是树的最大宽度。在最坏情况下,队列中最多会存储一层的所有节点数量。

示例

对于输入 root = [3,9,20,null,null,15,7]

  1. 第一层只有根节点 3,深度为 1。
  2. 第二层有节点 920,深度增加到 2。
  3. 第三层有节点 157,深度增加到 3。
  4. 遍历完所有层,最终返回深度 3

相关文章:

leetcode 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3…...

elasticsearch集群部署及加密通讯

原文地址&#xff1a;elasticsearch集群部署及加密通讯 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 第零步&#xff0c;准备 给各台设备配置虚拟主机名&#xff0c;这样集群不依赖IP&#xff0c;即使IP变动&#xff0c;改动也更方便。参考…...

ML 系列:第 32节 — 机器学习中的统计简介

文章目录 一、说明二、统计概述三、描述性统计与推断性统计3.1 描述统计学3.2 推论统计 四、描述性统计中的均值、中位数和众数 一、说明 机器学习中的统计 随着我们深入研究机器学习领域&#xff0c;了解统计学在该领域的作用至关重要。统计学是机器学习的支柱&#xff0c;它…...

CatVton升级版?CatVton-Flux:AI虚拟试衣方案新选择。

之前的文章中已经和大家介绍过虚拟试衣方案CatVton&#xff0c;感兴趣的小伙伴可以点击下面链接阅读~ 中山大学与Pixocial联手提出CatVTON&#xff1a;轻量化架构与高效训练&#xff0c;助力虚拟试衣技术落地应用&#xff01; 今天给大家介绍的是CatVton-FLUX&#xff0c;它是…...

JavaEE---计算机是如何工作的?

1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…...

十、Spring Boot集成Spring Security之HTTP请求授权

文章目录 往期回顾&#xff1a;Spring Boot集成Spring Security专栏及各章节快捷入口前言一、HTTP请求授权工作原理二、HTTP请求授权配置1、添加用户权限2、配置ExceptionTranslationFilter自定义异常处理器3、HTTP请求授权配置 三、测试接口1、测试类2、测试 四、总结 往期回顾…...

C#基础控制台程序

11.有一个54的矩阵&#xff0c;要求编程序求出其中值最大的那个元素的值&#xff0c;以及其所在的行号和列号。 12.从键盘输入一行字符&#xff0c;统计其中有多少个单词&#xff0c;单词之间用空格分隔开。 13.输入一个数&#xff0c;判断它是奇数还是偶数&#xff0c;如果…...

【网络安全】CSRF

一、什么是CSRF CSRF&#xff08;Cross-Site Request Forgery&#xff09;是一种web应用程序安全漏洞&#xff0c;它利用了用户在已登录的状态下的信任&#xff0c;通过欺骗用户发送未经授权的请求来执行恶意操作。这种攻击的危害性取决于受害者在目标网站上的权限。 二、CSR…...

网络原理(一)—— http

什么是 http http 是一个应用层协议&#xff0c;全称为“超文本传输协议”。 http 自 1991 年诞生&#xff0c;目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的&#xff0c;例如 http1.0&#xff0c;http1.0&#xff0c;http2.0 http3 是…...

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 &#x1f…...

【Zookeeper】四,Zookeeper节点类型、通知、仲裁、会话

文章目录 Zookeeper的架构znode的版本Zookeeper的节点类型层级树状结构znode的不同类型 Zookeeper监视与通知通知的类型 Zookeeper的仲裁Zk的会话会话的生命周期 Zookeeper的架构 Zookeeper的服务器端运行两种模式&#xff1a;独立模式&#xff08;standalone&#xff09;和仲…...

【二分查找】力扣 34. 在排序数组中查找元素的第一个和最后一个位置

一、题目 二、思路 将题目转化为求解 target 和 target 1 的查找。分别采用最基础的二分查找即可。 三、题解 class Solution {public int[] searchRange(int[] nums, int target) {int n nums.length;int start lowerBound(nums, target);if (start n || nums[start] !…...

以达梦为数据库底座时部署的微服务页面报乱码,调整兼容模式

1.问题描述 部署微服务&#xff0c;文件、代码是延用的mysql类型的&#xff0c;部署前做了部分适配&#xff0c;但是在使用dm数据库进行安装的服务在页面上查询出的数据却都是乱码 2.查询官网&#xff0c;注意到一个参数COMPATIBLE_MODE兼容模式的配置 考虑是延用mysql&…...

Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解

文章目录 前言一、简单工厂&#xff08;静态工厂&#xff09;1、概述2、代码实现3、优缺点 二、工厂方法模式1、概述2、代码实现3、优缺点 三、抽象工厂模式1、概述2、代码实现3、优缺点 四、总结 前言 先看个案例&#xff1a;【手机和手机店】在没有工厂的时候&#xff0c;手…...

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模&#xff0c;采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声&#xff08;无回波&#xff09;特性&#xff0c;仿胎儿超声影像呈对比明显…...

网络原理->DNS协议和NAT协议解

前言 大家好我是小帅&#xff0c;今天我们来了解应用层的DNS协议和NAT技术 个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G 文章目录 1.重要应⽤层协议DNS(Domain Name System)1.1 DNS背景 2. NAT技术3. 总结 1.重要应⽤层协议DNS(Domain Name System) DNS是⼀整套从域…...

基于yolov8、yolov5的100种中药材检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…...

RuoYi排序

RuoYi框架提供了多种实现排序的方法&#xff0c;以满足不同场景下的需求。这里简要介绍几种常见的排序实现方式&#xff1a; 1. 后端排序 1.1 使用startPagePlus方法 RuoYi框架中&#xff0c;可以通过对BaseController进行扩展来实现更灵活的分页与排序功能。例如&#xff0…...

Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)

我们在做数据之前要知道几个问题 1、在代码层面怎么来数据驱动 2、yaml文件是什么 3、怎么用yaml文件实现对应的数据驱动 我们用的是pytest框架所以相对来说是简单的&#xff0c;我们通过pytest框架来实现&#xff0c;而框架中要数据驱动用到我们装饰器就好啦pytest.mark.p…...

BASLER工业相机维修不能触发拍照如何处理解决这个问题

BASLER工业相机维修不能触发拍照如何处理解决这个问题&#xff1f;最近遇到挺多工业相机维修咨询这个不能触发拍照的案例&#xff0c;所以今天优米佳维修的技术就抽空整理了这篇关于BASLER相机不能触发拍照的处理方法分享给大家。 当碰到巴斯勒工业相机不能触发拍照的问题&…...

Could not locate device support files.

报错信息&#xff1a;Failure Reason: The device may be running a version of iOS (13.6.1 17G80) that is not supported by this version of Xcode.[missing string: 869a8e318f07f3e2f42e11d435502286094f76de] 问题&#xff1a;xcode15升级到xcode16之后&#xff0c;13.…...

linux系统中常用文件日常使用命令记录

我们办公机是Ubuntu系统&#xff1b; 记录下工作中经常使用的几个文件或命令或一些零碎的知识点&#xff1a; &#xff08;该文档会持续更新&#xff09; 查看系统信息&#xff1a; uname -a cat /etc/product-info cat /etc/os-version 存放系统启停脚本 /etc/init.d/ 存放源…...

【C++打怪之路Lv16】-- map set

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持…...

TPU-MLIR 项目源码结构分析

TPU-MLIR 项目源码结构分析 本文用作学习记录和交流分享&#xff0c;主要内容为 TPU-MLIR 的源码框架分析和构建流程分析。源码地址&#xff1a;https://github.com/sophgo/tpu-mlir 文件结构 从最外层开始分析 envsetup.sh 该脚本用于配置和初始化开发环境&#xff0c;其中…...

IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“

参考文章&#xff1a;https://blog.csdn.net/yueeryuanyi/article/details/14211090 问题&#xff1a;IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“编译都没问题 解决思路 – >【清除缓存】 1. 强制刷新Maven缓存 选择 Maven 标签&#xff0c;Exe…...

Sourcetree:一款强大的Git客户端

Sourcetree&#xff1a;一款强大的Git客户端 Sourcetree是一款由Atlassian开发的免费Git客户端&#xff0c;它提供了一个直观的图形界面&#xff0c;让用户能够轻松地管理他们的版本控制系统。无论是初学者还是有经验的开发者&#xff0c;Sourcetree都能提供方便快捷的Git操作…...

Linux环境变量与本地变量

文章目录 Linux环境变量与本地变量什么是环境变量查看环境变量设置环境变量本地变量命令行参数 Linux环境变量与本地变量 什么是环境变量 操作系统或运行时环境中存储的一些变量&#xff0c;用来存储与进程或系统相关的配置信息。这些变量在进程启动时由操作系统或Shell读取&…...

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…...

QT按下两次按钮,保存这期间内变换的QtextEdit控件内的数据

这个功能在项目中很常见&#xff0c;对界面里某个控件的数据进行记录&#xff0c;我这个是每秒记录5次&#xff0c;实际就是每200ms触发一次定时器&#xff0c;来满足需求。 .h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QtSerialPort> …...

daos源码编译

1. 前言 本文详细介绍如何在almalinux8.9上编译daos.2.0.0源码。系统环境如下&#xff1a; daos: 2.0.0 linux os: almalinux 8.9 linux kernel: 4.18.0-513.5.1.el8_9.x86_64之所以选择2.0.0版本&#xff0c;是因为daos从2.0.0开始是一个全新的架构设计&a…...