LC-257. 二叉树的所有路径

技术博客创作规范:拒绝低俗化,聚焦AI与开源实践 技术博客是开发者分享工程经验、传播技术知识的重要载体,其核心在于通过清晰的项目介绍、功能描述、部署流程和接口调用展现可复用的实践路径。在AI领域,围绕图像生成模型、ComfyUI工作流、TTS语音合成、OCR识别及视频生成等开源项目的本地部署与API封装,已成为开发者高频关注的热点。一篇合格的技术文章应当从基础概念切入,讲清原理,强调工程价值,并给出真实应用场景,而非依赖低俗化的标题或猎奇措辞吸引流量。只有坚持合规、安全的原则,以开源项目实测为基础,才能真正帮助读者解决显存优化、批量任务调度等实际问题,推动 阅读详情

LC-257. 二叉树的所有路径

递归法

这道题是一个简单题,虽然经过一番思考做了上来,但是确实是思维不清晰,所以还是要总结一下。

这道题是记录根节点到叶子节点的路径,最重要的是想明白返回条件。

  • 这道题是记录到叶子节点,自然是只有到叶子节点的时候,才会返回,也就是说左右子树都不存在的时候 not root.left and not root.right。不要对本层节点进行判断,那样会导致对叶子节点的左右子树判断,最后会同一个路径会添加两次。

  • 这道题我采用的时先序遍历,体现在最开始遍历的时候就先把root.val加入到答案中啦~然后才进行的递归。

  • 因为上面是判断了一个节点的左右孩子的存在性,没有判断这个节点是否存在,会出现空节点报错,所以在递归的时候,就先应该判断节点是否存在。**重点:**通过传参的时候用+拼接的方式传参,避免了后面还需要回退的问题,这是个小技巧。也就是说避免了先递归再回溯的问题。

    if root.left: func(root.left, tmp + '->' + str(root.left.val))
    if root.right: func(root.right, tmp + '->' + str(root.right.val))
    
  • 有人会好奇,如果没有左右孩子都不存在,那么本层的怎么返回呢?其实不会的,因为别忘记了我们最开始就判断了这个节点是不是叶子节点,如果是叶子节点直接添加,如果不是,则必然一个孩子。

代码如下:

class Solution:
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        res = []
        
        def func(root, tmp):
            if not root.left and not root.right: 
                res.append(tmp)
                return
            if root.left: func(root.left, tmp + '->' + str(root.left.val))
            if root.right: func(root.right, tmp + '->' + str(root.right.val))

        func(root, str(root.val))
        return res

迭代法

迭代法依然使用前序遍历的方法。这里的主要思想是需要两个栈,同时讲节点和该节点对应的路径保存。什么叫该节点对一个的路径保存呢,意思就是说到这个节点为止,已经路径到哪了,这样如果它还有孩子直接把 这个路径取出,添加上孩子就好了。

image-20220404153029677

以示例为了,假如stack[1] = 2,那么path_st[2] = “1->2”,这样如果到节点5了,只需要取出path_st[2] = "1->2"加上5,并且5是叶子节点,直接添加到最后的result里面就可以了。

代码如下:

from collections import deque

class Solution:
    """二叉树的所有路径 迭代法"""

    def binaryTreePaths(self, root: TreeNode) -> List[str]:
        # 题目中节点数至少为1
        stack, path_st, result = deque([root]), deque(), []
        path_st.append(str(root.val))

        while stack:
            cur = stack.pop()
            path = path_st.pop()
            # 如果当前节点为叶子节点,添加路径到结果中
            if not (cur.left or cur.right):
                result.append(path)
            if cur.right:
                stack.append(cur.right)
                path_st.append(path + '->' + str(cur.right.val))
            if cur.left:
                stack.append(cur.left)
                path_st.append(path + '->' + str(cur.left.val))

        return result
【win11】主板更新之后pin不可用,恢复方法 台式机的主板更新了BIOS,再开机竟然登录不进去系统了。 登录界面上显示:【由于此设备上的安全设置已更改,你的pin码不再可用。单击以重新设置pin】 点击【单击以重新设置pin】没有任何反应。 也没有密码登录选项。 在网上找到解决方法,不用PE,只需要按步骤操作即可。通过实际验证可行,现记录如下。 阅读详情

相关推荐

深度学习CV八股文

深度学习CV八股文一、深度学习中解决过拟合方法L1和L2正则化DropoutDropout正则化Inverted Dropout(反向随机失活)Dropout起到正则化效果的原因:Dropout的缺点eargstopping ( 早停法 )二、深度学习中解决欠拟合方法三、梯度消失和梯度爆炸解决梯度消失的方法解决梯度爆炸的方法四、神经网络权重初始化方法Xavier指数加权移动平均数五、梯度下降法梯度下降SGD(随机梯度下降法)Momentum(动量梯度下降)Nesterov Momentum自适应学习率算法A

填坑 2万+

【LC257】——二叉树的所有路径(DFS)

给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 1. 思路 2. 代码 # 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 clas

weixin_44441131的博客 168

ESP32+LED12864液晶屏实战:手把手教你显示中文与自定义图标(附完整代码)

本文详细介绍了如何使用ESP32单片机驱动带字库的LED12864液晶屏,实现中文显示与自定义图标。从硬件选型、接线方案到驱动编写、字库解析,提供了完整的实战代码与优化技巧,并最终构建了一个智能家居控制面板的完整示例项目。

weixin_29212867的博客 144

[BFS和DFS的故事]LC257---二叉树的所有路径(左右为空说明走到尽头了)

LeetCode257题目如下思路与代码 题目如下 思路与代码 二叉树,很熟悉,还是简单的二叉树,缪杀! 二叉树路径直接dfs深搜就可以了啊! /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr)

あなたの可愛い41 160

图形学基础|基于SDF的卡通阴影图

图形学基础|基于SDF的卡通阴影图 文章目录图形学基础|基于SDF的卡通阴影图一、前言二、SDF(Signed Distance Field)三、阴影图生成3.1 SDF生成3.2 插值参考博文 一、前言 回顾之前做的卡通渲染,角色面部阴影是靠一张阴影贴图实现的。 为了更好地控制角色的脸部阴影,通过计算脸部朝向与光照方向的夹角和一张单色的FaceMap来判断。 FaceMap的每个像素表示:该像素判断为阴影时候需要达到的夹角。 例如: 当方向光正对角色的时候,夹角为0°,对应的值为0,此时,FaceMap

【黑键】 1万+

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 381

LC 257.二叉树的所有路径

给你一个二叉树的根节点root,按,返回所有从根节点到叶子节点的路径。是指没有子节点的节点。

花木凋零成兰的博客 958

31、工程中不确定性量化与优化的全面解析

本文全面解析了工程中不确定性量化与优化的关键方法。针对数据充足与不足两种情况,分别介绍了概率理论和非概率方法在不确定性建模中的应用;系统阐述了采样方法、FORM/SORM、泰勒级数近似等不确定性传播技术;深入比较了RBDO与RDO两种主流优化框架的原理、步骤及适用场景,并通过两杆桁架案例展示了具体实现过程。文章旨在为工程师提供一套完整的从不确定性分析到优化设计的方法论,提升工程系统的可靠性与稳健性。

php55的博客 121

二叉树:LC257,二叉树的所有路径

【代码】二叉树:二叉树的所有路径,LC257。

weixin_51243388的博客 411

【异常】安装hermes-agent时Git克隆大仓库报错:error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CAN

摘要:本文分析了Ubuntu服务器执行Git递归克隆时出现的网络传输中断错误(HTTP/2流异常关闭、数据截断)。主要原因是网络限制、协议兼容问题和缓冲区不足。提供了四种解决方案:1)扩大Git HTTP缓冲区;2)切换为HTTP/1.1协议;3)采用浅克隆+分步拉取子模块;4)网络优化措施。重点推荐浅克隆分步拉取作为最有效方案,所有方法无需重启即可生效,可快速解决大仓库递归克隆失败问题。

奶爸的编程之路,也就一周冷个三天 668

innovus中如何设置cts参数

上面是设置cts的一般设置,如果需要对某些skew group或者某些clock tree设置不一样的参数,如需要对clk1这个clock设置不一样的inverter,可以使用。需要查询已经设置过的ccopt参数,可以使用get_ccopt_property去查询,方法和set_ccopt_property一致。言归正传,cts的设置命令是set_ccopt_property,获取命令是get_ccopt_property。另外,set_ccopt_property提供一套命令查询方法。

芯冰乐 543

LC257. 二叉树的所有路径

class Solution(object): def binaryTreePaths(self, root): """ :type root: TreeNode :rtype: List[str] """ res,sol = [],"" def backtrack(root,sol): if root: sol += str(root.val)

weixin_44392348的博客 1141

微信小程序 - 最新详细实现跳转打开第三方网站方法流程及示例代码,在小程序内直接打开H5页面或微信公众号文章后台业务域名配置及下载校验文件上传服务器,嵌入外部网站跳转第三方h5网页(详细配置及代码)

微信小程序,打开第三方网站,放校验文件,怎么配置业务域名,后台配置,怎么打开外部没有关联的网站,小程序直接打开公众号文章,指定页面,跳转第三方url,跳转到外部网站,小程序跳转到任意外部网页,网站链接,跳转到其他网页(外部链接),小程序嵌入外部h5链接,校验文件怎么放到对方服务器上,要跳转到网站没权限放过去,校验文件验证域名,把校验文件放到对面网站,别人的服务器也打不开没权限怎么放呢,勾选不校验合法域名,txt,打不开别人的网页怎么办,真机调试打不开,无法跳转,有什么其他办法不放校验文件吗,别人不可能同意,

🏆 前端领域优质创作者 1万+

【无标题】LC257.二叉树的所有路径

题目 查看题目 解题思路 使用回溯的思想,核心在保存上一个值的路径,采用递归的方式实现DFS,完成对整个路径的遍历。 使用的数据结构:一个String类型的ArrayList用来接收最后的结果,一个Integer类型的ArraList用来接收每一轮遍历到的节点的数值 主要思路: 当节点为null直接返回定义的res(此时为null) 当根节点不为null,进入递归中,递归的主要思想: base case :如果节点的左右子树均为null,此时代表已经走到了叶子节点,此时可以将之前存储的走过的每个节点的

Max的博客 851

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LC257.二叉树的所有路径(迭代法)

题目 查看题目 解题思路 迭代法实现所有路径的,迭代法采用BFS的方式,使用的数据结构: String类型的数组列表,用来存储最后的结果。 Object(可以改变的存储的数据的数据类型)类型的stack栈 主要思路: 判断根结点是否为null,如果为null,直接返回res数组(此时列表为空) 当根结点不为null,将根节点的节点和节点值全部推入栈 当栈中不为空时,首先弹出栈尾元素的节点和到达该节点的路径信息。 判断是否到达叶子节点,如果到达叶子节点,则将该点作为路径的终点(不加“->”)加入到路径

Max的博客 266

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

随想录训练营15/60 | LC 110.平衡二叉树;LC 257. 二叉树的所有路径;LC 404.左叶子之和

通过这几天的实践,可以看出后序遍历在计算二叉树深度和节点高度时非常方便,前序遍历反而要考虑很多东西。当在统计二叉树的路径时,使用前序遍历比较合适。

weixin_43845977的博客 195

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

代码随想录算法训练营第十七天| LC110. 平衡二叉树、LC257. 二叉树的所有路径、LC404. 左叶子之和

代码随想录算法训练营

qq_54892503的博客 1654

算法训练营打卡Day17 | 二叉树part04

一、LC110.平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

weixin_51540348的博客 166

代码随想录算法训练营 | Day17 lc110平衡二叉树 lc257二叉树的所有路径lc404左叶子之和

求高度:用后序遍历求深度:用前序遍历。

Mr_Click的博客 366

6.10二叉树的所有路径(LC257-E,不太会)

因为要让父节点指向孩子节点,才能输出路径。举个例子理解一下:中:先push入1左:再Push入2右:再Push入5 \\1->2->5pop 5pop 2到1的时候,再push入3 \\1->3。

m0_50696252的博客 115

代码随想录算法训练营第十五天| lc.110. 平衡二叉树 | lc. 257. 二叉树的所有路径 | lc. 104.二叉树的最大深度|lc 404.左叶子之和|lc 222. 完全二叉树的节点个数

题目给定一个二叉树,判断它是否是平衡二叉树平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。

senny_的博客 1834

代码随想录算法训练营第十七日| LC110:平衡二叉树 LC257:二叉树的所有路径 LC404:左叶子之和

1 表示已经不是平衡二叉树了,否则返回值是以该节点为根节点树的高度。要有path 和 res 来记录。注意是左叶子不是左侧节点。

EdisonW8的博客 141

代码随想录算法训练营第十五天|LC222.完全二叉树的节点个数|LC110.平衡二叉树|LC257.二叉树的所有路径|LC404.左叶子之和

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。1、二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数;

weixin_49494409的博客 599

LeetCode113:路径之和Ⅱ,三题横向深度对比

本文介绍了LeetCode 113题(路径总和 II)的解题思路,这是一道二叉树路径问题的进阶题目。文章通过对比112题(判断路径是否存在)和257题(找出所有路径字符串),展示了递归和回溯思想的演变过程。解题采用深度优先搜索(DFS)结合显式回溯的方法,重点包括:使用List记录路径、在叶子节点校验路径和、显式回溯移除节点、深拷贝保存有效路径等关键点。文章分析了时间复杂度O(N*H)和空间复杂度O(H),并通过三题对比表总结了从简单判断到完整记录的不同处理方式。该解法是练习二叉树DFS和回溯技巧的经典案例

lyh2004_08的博客 1337

代码随想录算法训练营第十七、十八天 | LC 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、 513. 找树左下角的值、 112. 路径总和、106. 从中序与后序遍历序列构

【代码】代码随想录算法训练营第十七、十八天 | LC 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、 513. 找树左下角的值、 112. 路径总和、106. 从中序与后序遍历序列构。

weixin_43730667的博客 131

代码随想录刷题第十七天| 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

代码随想录刷题第十七天

shaozi25的博客 453
上一篇: LC-106. 从中序与后序遍历序列构造二叉树
下一篇: LC-2217找到指定长度的回文数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我哈士奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值