面试经典150题——路径总和

a mountain range with a lake in the foreground

1. 题目描述

image-20240424100450993

2.  题目分析与解析

2.1 思路一

注意题目的关键点:判断该树中是否存在 根节点到叶子节点 的路径,起点是root,终点是叶子节点。

那么我们就可以从根节点按照层序遍历的方式,从根节点从根到 叶子不断对路径进行加和(注意:层序遍历需要使用一个队列存储每一层的节点),就可以按照如下步骤进行:

image-20240424102221897

image-20240424102229888

最后发现当前层有叶子节点的值是targetSum就说明返回true,否则返回false。

2.2 思路二

因为我们在思路一按照层序遍历,不可避免地使用了一个存储当前层级的队列,那么能不能不用队列也能实现呢?答案是可以的。

因为我们已经有了targetSum,并且我们在从根节点向下遍历的过程中,如果要实现从root到某一个叶子节点的路经总和为targetSum,那么我们是不是也就相当于我从根节点root走到下一个节点root.left或者root.right,剩下的路径距离 targetSum - root.val?也就是按照先序遍历的方式,每走过一段路就用 targetSum - 当前节点的.val 最后到达叶子节点判断是否剩余路径等于此时的targetSum就可以了。

3. 代码实现

3.1 思路一

image-20240424103128281

image-20240424103109715

3.2 思路二

image-20240424104108243

image-20240424104058477

4. 相关复杂度分析

4.1 方法 hasPathSum (BFS 使用队列)

时间复杂度
  • 最坏情况: 在最坏的情况下,需要遍历树中的每一个节点。因此,时间复杂度为 (O(N)),其中 (N) 是树中节点的数量。

  • 最佳情况: 如果你在树的较浅层就找到了符合条件的路径,你可能不需要遍历所有节点。但理论上,这依然保持 (O(N)),因为在最坏情况下你需要遍历所有节点。

空间复杂度
  • 空间复杂度: 由于使用了队列来存储每一层的节点,空间复杂度主要取决于树的宽度(即最宽的那层有多少个节点)。在最坏的情况下(完全二叉树),最底层大约包含 (N/2) 个节点,因此空间复杂度也是 (O(N))。

2. 方法 hasPathSum2 (DFS 使用递归)

时间复杂度
  • 时间复杂度: 与 BFS 方法类似,DFS 方法在最坏情况下也需遍历树的每一个节点来确认是否存在符合条件的路径,因此时间复杂度也是 (O(N))。

空间复杂度
  • 空间复杂度: 递归方法的空间复杂度主要由递归调用栈的深度决定,这取决于树的高度。在最坏情况下(树完全不平衡,如退化成链表),空间复杂度为 (O(N))。在最好的情况下(树完全平衡),空间复杂度为 (O(\log N))。

总结来说,两种方法在时间复杂度上都是 (O(N)),而在空间复杂度上,DFS在最好情况下优于BFS,因为平衡树的高度远小于节点数。BFS由于需要存储至少一整层的节点,所以在空间上可能消耗更多,特别是在树的层次较多时。

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

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

相关文章

前端H5动态背景登录页面(下)

最近正好有点儿时间,把之前没整理完的前端动态背景登录页面给整理一下!这是之前的连接前端H5动态背景登录页面(上),这主要是两个登陆页面,一个彩色气泡,一个动态云朵,感兴趣的可以点…

Python程序设计教案

文章目录: 一:软件环境安装 第一个软件:pycharm 第二个软件:thonny 第三个软件:IDIE(自带的集成开发环境) 二:相关 1.规范 2.关键字 3.Ascll码表 三:语法基础…

linux nginx开机自启

安装位置/usr/local/nginx监听端口80配置文件地址/usr/local/nginx/conf/ 注册服务 cd /usr/lib/systemd/system/vim nginx.service nginx.service 内容 [Unit] DescriptionThe NGINX HTTP and reverse proxy server Aftersyslog.target network.target[Service] Typeforki…

离开A页面时,取消A页面的axios接口数据请求

需求:从A页面跳转至B页面时,要取消A页面的axios请求;有时候,我们可能需要在发送请求后取消它,比如用户在请求还未完成时离开了当前页面或者执行了其他操作,本文将介绍如何在使用 Axios 发送请求时取消这些请…

Apache反向代理的功能和設置

Apache反向代理是Apache HTTP伺服器的一種功能,可以讓伺服器接收客戶端的請求並將其轉發到其他伺服器,然後將這些伺服器的回應返回給客戶端。這樣,客戶端就像直接訪問Apache伺服器一樣,而實際上是在訪問其他的伺服器。 Apache反向…

【Altium Designer 22原理图,PCB】

Altium Designer 22-原理图,PCB ■ AD22■ 工程■ 工程之外的文件 ■ AD22-画原理图■ 原理图库的设计■ 操作心得■ 元件库来源■ 检查原理图库的正确性并生成报告 ■ 原理图的设计■ 原理图页的大小设置■ 设置栅格100mil■ 放置元器件■ 元件的复制,剪…

从 MySQL 到 ClickHouse 实时数据同步 —— Debezium + Kafka 表引擎

目录 一、总体架构 二、安装配置 MySQL 主从复制 三、安装配置 ClickHouse 集群 四、安装 JDK 五、安装配置 Zookeeper 集群 六、安装配置 Kafaka 集群 七、安装配置 Debezium-Connector-MySQL 插件 1. 创建插件目录 2. 解压文件到插件目录 3. 配置 Kafka Connector …

常见UI设计模式有哪些?从小白到资深必学

通过了解如何以及何时使用,每种 UI 设计模式都有其特定的目的,可以创建一个一致高效的界面。UI 设计模式为用户界面设计者提供了一种通用语言,并为网站和应用程序的用户提供了一致性。本指南,即时设计总结了 UI 设计模式和 UI 设计…

执法记录仪如何防抖

影像记录发展至今,防抖已是必备要素,实际拍摄过程中,或通过硬件的运动补偿,或通过软件的加工处理,来抵消抖动对拍摄的影响。 到现在为止,已经有哪些防抖技术,它们各有什么优劣呢? …

HTTP协议的总结

参考 https://www.runoob.com/http/http-tutorial.html 1.简介 HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模…

美客多、Lazada商家必须知道的养号技巧,助力打造爆款!

在Lazada平台开店,每个商家都渴望打造出自己的爆款产品。爆款不仅能为店铺带来大量流量,还能显著提升店铺和其他产品的转化率。然而,要想成功打造爆款,并非易事,需要掌握一些关键的小技能。 在Lazada平台,商…

每日OJ题_BFS解决拓扑排序③_力扣LCR 114. 火星词典

目录 力扣LCR 114. 火星词典 解析代码 力扣LCR 114. 火星词典 LCR 114. 火星词典 难度 困难 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已…

十五、Java中I/O流

1、流的基本概念 1)流的概念 流:在Java中所有的数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质就是数据传输,根据数据传输特性将流抽象为各种类。 (1)按照流向分:输入流、输出流。…

网络靶场实战-物联网安全qiling框架初探

背景 Qiling Framework是一个基于Python的二进制分析、模拟和虚拟化框架。它可以用于动态分析和仿真运行不同操作系统、处理器和体系结构下的二进制文件。除此之外,Qiling框架还提供了易于使用的API和插件系统,方便使用者进行二进制分析和漏洞挖掘等工作…

【求助】西门子S7-200PLC定时中断+数据归档的使用

前言 已经经历了种种磨难来记录我的数据(使用过填表程序、触摸屏的历史记录和数据归档)之后,具体可以看看这篇文章:🚪西门子S7-200PLC的数据归档怎么用?,出现了新的问题。 问题的提出 最新的…

网工交换基础——生成树协议(01)

一、生成树的技术概述 1、技术背景 二层交换机网络的冗余性导致出现二层环路: 人为因素导致的二层环路问题: 二层环路带来的网络问题: 生成树协议的概念: STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于在网…

代码随想录算法训练营第三十七天| 738.单调递增的数字,968.监控二叉树

目录 题目链接:738.单调递增的数字 思路 代码 题目链接:968.监控二叉树 思路 代码 总结 题目链接:738.单调递增的数字 思路 既然是求单调递增的数字,要判断相邻数字之间的大小关系。有两种遍历顺序,从前往后和从…

面向对象练习坦克大兵游戏

游戏玩家(名称,生命值,等级),坦克,大兵类,玩家之间可以相互攻击,大兵拥有武器,用枪弹和反坦克炮弹,造成攻击不同,坦克攻击值固定,请设…

设计模式-六大原则

设计模式的六大原则是软件工程中的基本概念,使得构建可维护、可扩展和可重用的代码。 1.单一职责原则(Single Responsibility Principle):一个类或方法应该只有一个引起变化的原因,确保类或模块的功能高度内聚。 案例&…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…