LeetCode:257. 二叉树的所有路径
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:257. 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
注意这里traversal函数里面path使用的是list,是引用传递的,需要回溯;前序遍历,中左右
public List<String> binaryTreePaths(TreeNode root) {if (root == null)return new ArrayList<>();// 存放结果List<String> res = new ArrayList<>();// 存放当前的路径List<String> path = new ArrayList<>();traversal(root, path, res);return res;}private void traversal(TreeNode cur, List<String> path, List<String> res) {// 先将当前节点的val放入path中,这里不考虑NPE,非空的时候在调用该方法path.add(cur.val + "");// 如果当前节点是叶子节点if (cur.left == null && cur.right == null) {String temp = String.join("->", path);res.add(temp);}// 左子结点不为空才继续向左if (cur.left != null) {traversal(cur.left, path, res);// 这个remove就是回溯的过程!path.remove(path.size() - 1);}// 右子结点不为空才继续向右if (cur.right != null) {traversal(cur.right, path, res);path.remove(path.size() - 1);}}
和上面解法的区别就是初始的时候就往list里面放cur.val了,这样在traversal方法里面就仅剩:终止条件,单层递归逻辑(分别向左,右遍历),就是一个简单的前序遍历,中左右
public List<String> binaryTreePaths(TreeNode root) {if (root == null)return new ArrayList<>();// 存放结果List<String> res = new ArrayList<>();// 存放当前的路径List<String> path = new ArrayList<>();path.add(root.val + "");traversal(root, path, res);return res;}private void traversal(TreeNode cur, List<String> path, List<String> res) {// 如果当前节点是叶子节点if (cur.left == null && cur.right == null) {String temp = String.join("->", path);res.add(temp);}// 左子结点不为空才继续向左if (cur.left != null) {path.add(cur.left.val + "");traversal(cur.left, path, res);// 这个remove就是回溯的过程!path.remove(path.size() - 1);}// 右子结点不为空才继续向右if (cur.right != null) {path.add(cur.right.val + "");traversal(cur.right, path, res);path.remove(path.size() - 1);}}
精简版,traversal方法参数中传的是字符串
public List<String> binaryTreePaths(TreeNode root) {if (root == null)return new ArrayList<>();List<String> res = new ArrayList<>();traversal(root, "", res);return res;}private void traversal(TreeNode cur, String path, List<String> res) {path += cur.val;if (cur.left == null && cur.right == null) {res.add(path);}if (cur.left != null) {traversal(cur.left, path + "->", res);}if (cur.right != null) {traversal(cur.right, path + "->", res);}}
相关文章:
LeetCode:257. 二叉树的所有路径
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:257. 二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根…...
RSICV国产芯片之CHV208
1. 芯片选型分析的对比维度 分析或者对标应用的芯片替代思路 1.1 内核/主频/存储空间支持 内核能力/指令集支持(考虑工具链兼容性); 主频:对比计算能力是否满足基本要求 存储:内存--数据搬移空间决定数据运算的…...
理解神经网络
神经网络是一种模拟人类大脑工作方式的计算模型,是深度学习和机器学习领域的基础。 基本原理 神经网络的基本原理是模拟人脑神经系统的功能,通过多个节点(也叫神经元)的连接和计算,实现非线性模型的组合和输出。每个…...
Android 之 List 简述
一、简单创建方式 Android 开发中,列表有很多种类,如ArrayList、LinkedList、List、MutableList等,创建列表的方式如下所示: fun listDemo() {// 使用 listOf 创建不可变的空列表val list listOf<Int>()val list1 listOf…...
设计模式の中介者发布订阅备忘录模式
文章目录 前言一、中介者模式二、发布订阅模式三、备忘录模式 前言 本篇是关于设计模式中介者模式、观察者(发布-订阅)模式、以及备忘录模式的学习笔记。 一、中介者模式 中介者模式是一种行为型设计模式,其核心目的是为了减少对象之间的复杂…...
云手机群控能用来做什么?
随着云手机的发展,云手机群控技术逐渐从小众的游戏多开工具,发展为涵盖多个领域的智能操作平台。不论是手游搬砖、短视频运营,还是账号养成等场景,云手机群控都展现出了强大的应用潜力。本文将为大家详细解析云手机群控的应用场景…...
fpgafor循环语句使用
genvar i;//循环变量名称 generate for(i0;i<4;ii1)begin:tx//自己定义名称 //循环内容 end endgenerate12位的16进制乘以4就是48位位宽的2进制 因为 222*2(2^4)16...
【FastAPI】BaseHTTPMiddleware类
一、概述 在FastAPI中,BaseHTTPMiddleware 类是Starlette框架提供的一个抽象基类,它允许开发者基于HTTP请求/响应接口编写ASGI中间件。 这个类对于希望实现自定义中间件逻辑的开发者来说是非常重要的工具。 通过继承 BaseHTTPMiddleware 并实现特定的方…...
Solon v3.0.5 发布!(Spring 可以退休了吗?)
Solon 框架! 新一代,面向全场景的 Java 应用开发框架。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态。 追求: 更快、更小、更简单提倡: 克制、高效、开放、生态 有什么特点&am…...
网络安全攻防演练中的常见计策
大家觉得有意义记得关注和点赞!!! 引言 在网络安全攻防演练里面,用于分析攻击者动机和行为的,国外的有基于攻击链分析的模型(如Cyber Kill Chain和ATT&CK)和基于威胁行为的模型(…...
SD卡模块布局布线设计
1、SD/TF/SIM卡的定义 2、SD/TF/SIM卡模块引脚定义以及图示 3、SD/TF/SIM卡接口布局和布线 4、小结 1、BGA两线交叉时,可以在源头将两线互相短路连接,然后再输出口删除一小节线,然后CHRLX/V,这样就可以换两条线的网络,…...
Flask-----SQLAlchemy教程
存session session[username] username # 存储数据到 session 取session username session.get(username) render_template return render_template(index.html, usernameAlice),渲染一个包含 username 变量的模板。 redirect return redirect(url_for(profil…...
STM32 高级 物联网通信之CAN通讯
目录 CAN通讯介绍 物理层 协议层 CAN的帧(报文)种类 1 数据帧(发送单元->接受单元) 2 远程帧(接受单元->发送单元) 3 错误帧(发送方发送数据错误会发送的状态帧) 4 过载帧(接收方放不下会发送到的状态帧) 5 帧间隔(状态) 数据帧介绍 远程帧介绍 C…...
“乡村探索者”:村旅游网站的移动应用开发
3.1 可行性分析 从三个不同的角度来分析,确保开发成功的前提是有可行性分析,只有进行提前分析,符合程序开发流程才不至于开发过程的中断。 3.1.1 技术可行性 在技术实现层次,分析了好几种技术实现方法,并且都有对应的成…...
前端案例---自定义鼠标右键菜单
之前右击出现默认的选项菜单,使用evt.preventDefault()把默认的去掉,然后自定义右击的样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…...
浅谈归一化
在深度学习中,对网络层进行归一化(Normalization,简称Norm)是一个重要的技巧。常见的归一化方法包括批归一化(Batch Normalization)、层归一化(Layer Normalization)、实例归一化&am…...
lodash常用函数
文章目录 一、数组1、chunk分组2、difference、differenceBy、differenceWith3、findIndex4、intersection、intersectionBy、intersectionWith5、union、unionBy、unionWith 二、对象1、pick、omit 2、get、set三、数学1、sum、sumBy2、range 四、工具函数1、isEqual、isEmpty…...
触控算法总结
一、触控湿手指算法的具体实现原理涉及多个方面的技术和方法,主要包括以下几个关键点 1.电容变化检测 电容式触摸屏通过检测电容变化来确定触摸位置。当手指接触屏幕时,会引起电容的变化。然而,当手指湿润时,水分会影响电容值,导致触摸屏误判成无法正确识别触控点 2.噪声过滤: …...
齐次矩阵包含平移和旋转
第一个矩阵旋转矩阵 A [ R 1 0 0 1 ] A\left[\begin{matrix}R_{1} & 0\\0 & 1\end{matrix}\right] A[R1001] 第一个平移矩阵 B [ 1 T 1 0 1 ] B\left[\begin{matrix}1 & T_{1}\\0 & 1\end{matrix}\right] B[10T11] C [ R 2 0 0 1 ] C\left[\be…...
Move AI技术浅析(四):运动跟踪与估计
一、运动跟踪与估计模块概述 运动跟踪与估计 是 Move AI 的核心模块之一,其主要任务是从提取到的关键点特征中,分析和理解运动的动态特性,包括运动轨迹、速度、加速度、方向等。该模块通常包括 时间序列分析 和 运动估计 两个子模块。 时间…...
智能图像识别自动点击:解放双手的安卓自动化神器
智能图像识别自动点击:解放双手的安卓自动化神器 【免费下载链接】Smart-AutoClicker An open-source auto clicker on images for Android 项目地址: https://gitcode.com/gh_mirrors/smar/Smart-AutoClicker 你是否曾遇到这样的困境:游戏中需要…...
从哈希表到链表:一次搞懂链地址法解决冲突的C++实现细节(含插入与删除操作避坑)
从哈希表到链表:链地址法的C实战精解与避坑指南 在数据结构的世界里,哈希表因其接近O(1)的理想查找效率而备受青睐。但当我们真正动手实现时,特别是采用链地址法解决冲突时,那些看似简单的链表操作却暗藏玄机。本文将带您深入链地…...
避开FMC的那些‘坑’:正点原子F429开发板驱动TFT屏和SDRAM的实战避坑指南
正点原子F429开发板FMC接口深度优化:TFT屏与SDRAM的高效驱动实践 硬件连接的关键细节 在FMC接口应用中,硬件连接的正确性直接决定了后续软件调试的成败。许多开发者往往在硬件连接阶段就埋下了隐患,导致后期出现各种难以排查的问题。 地址…...
从Python代码到动态仿真:手把手教你用SimPy搭建第一个系统动力学模型
从Python代码到动态仿真:手把手教你用SimPy搭建第一个系统动力学模型 在数据分析与人工智能项目中,系统动力学(System Dynamics)正逐渐成为分析复杂系统行为的重要工具。与传统的Vensim等专用软件不同,Python开发者可以…...
效率提升:用快马AI构建集成化web终端效率工具面板
效率提升:用快马AI构建集成化web终端效率工具面板 作为一个经常需要操作终端命令的开发者,我一直在寻找提升效率的方法。本地工具如xshell8确实好用,但每次换设备都要重新配置,而且无法轻松分享给团队成员。最近尝试用InsCode(快…...
云凝结合计数器CNN粒子数浓度分析/python数据可视化
CCN-100是美国DMT公司(Drop Measurement Technologies)生产的一款经典仪器,专用于连续、实时测量大气中不同过饱和度下的CCN数浓度。它采用热梯度云室(Thermal Gradient Cloud Chamber)技术,模拟自然界中云…...
【区间概率预测】PSO-LightGBM-ABKDE多变量时序预测 基于粒子群算法优化轻量级梯度提升机结合自适应带宽核函数密度估计的多变量时序预测
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
产品经理必备!PRD实战手册:从需求梳理到高效落地的全流程解析
1. 为什么PRD是产品经理的"施工蓝图"? 刚入行时,我总以为PRD就是把老板和客户的需求整理成文档。直到有次开发团队拿着我写的20页文档集体"罢工",才明白PRD本质是跨团队协作的翻译器——要把模糊的想法转化为技术人员看…...
告别重复编码:用快马AI为你的.NET项目自动生成高效工具类与模板
今天想和大家分享一个.NET开发中的效率提升小技巧——如何用自动化工具快速生成常用工具类代码。作为一个经常需要重复编写类似功能的后端开发者,我发现合理使用代码生成工具可以节省大量时间,让我们把精力集中在更有价值的业务逻辑上。 分页响应类的设…...
Python 数据库操作:精准获取指定行指定列的完整指南
🎯 Python 数据库操作:精准获取指定行指定列的完整指南 下面给你分场景、给可直接运行的代码,覆盖所有常用需求,从基础到进阶一次性讲透。 一、核心前提:先拿到完整结果集 基于你之前的代码,我们先拿到所有数据和字段名: # 执行查询 sql = "SELECT * FROM user…...
