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

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

目录

    • 题目分析
    • 递归法

题目来源
257. 二叉树的所有路径

题目分析

前序遍历以及回溯的过程如图:
在这里插入图片描述

递归法

  • 1.递归函数参数以及返回值

要传入根节点,记录每一条路径的path,和存放结果集的result,这里递归不需要返回值,代码如下:

void traversal(TreeNode root, List<Integer> paths, List<String> res)
  • 2.确定递归终止条件

在写递归的时候都习惯了这么写:

if (root == null) {终止处理逻辑
}

但是本题的终止条件这样写会很麻烦,因为本题要找到叶子节点,就开始结束的处理逻辑了(把路径放进result里)。
那么什么时候算是找到了叶子节点? 是当 root不为空,其左右孩子都为空的时候,就找到叶子节点。
所以本题的终止条件是:

if (root.left == null&& root.right == null) {终止处理逻辑
}

这里我们先使用List结构的path容器来记录路径,那么终止处理逻辑如下:

  if (root.left == null && root.right == null) {// 输出StringBuilder sb = new StringBuilder();// StringBuilder用来拼接字符串,速度更快for (int i = 0; i < paths.size() - 1; i++) {sb.append(paths.get(i)).append("->");}sb.append(paths.get(paths.size() - 1));// 记录最后一个节点res.add(sb.toString());// 收集一个路径return;}
  • 3.确定单层递归逻辑

因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。

paths.add(root.val);// 前序遍历,中

然后是递归和回溯的过程,上面说过没有判断root是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。
所以递归前要加上判断语句,下面要递归的节点是否为空,如下

        if (root.left != null) { // 左traversal(root.left, paths, res);}if (root.right != null) { // 右traversal(root.right, paths, res);}

此时还没完,递归完,要做回溯啊,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。
那么回溯要怎么回溯呢,一些同学会这么写,如下:

        if (root.left != null) { // 左traversal(root.left, paths, res);}if (root.right != null) { // 右traversal(root.right, paths, res);}paths.remove(paths.size() - 1);// 回溯

这个回溯就有很大的问题,我们知道,回溯和递归是一一对应的,有一个递归,就要有一个回溯,这么写的话相当于把递归和回溯拆开了, 一个在花括号里,一个在花括号外。
所以回溯要和递归永远在一起,世界上最遥远的距离是你在花括号里,而我在花括号外!
那么代码应该这么写:

        // 递归和回溯是同时进行,所以要放在同一个花括号里if (root.left != null) { // 左traversal(root.left, paths, res);paths.remove(paths.size() - 1);// 回溯}if (root.right != null) { // 右traversal(root.right, paths, res);paths.remove(paths.size() - 1);// 回溯}

整体代码如下

class Solution {/*** 递归法*/public List<String> binaryTreePaths(TreeNode root) {List<String> res = new ArrayList<>();// 存最终的结果if (root == null) {return res;}List<Integer> paths = new ArrayList<>();// 作为结果中的路径traversal(root, paths, res);return res;}private void traversal(TreeNode root, List<Integer> paths, List<String> res) {paths.add(root.val);// 前序遍历,中// 遇到叶子结点if (root.left == null && root.right == null) {// 输出StringBuilder sb = new StringBuilder();// StringBuilder用来拼接字符串,速度更快for (int i = 0; i < paths.size() - 1; i++) {sb.append(paths.get(i)).append("->");}sb.append(paths.get(paths.size() - 1));// 记录最后一个节点res.add(sb.toString());// 收集一个路径return;}// 递归和回溯是同时进行,所以要放在同一个花括号里if (root.left != null) { // 左traversal(root.left, paths, res);paths.remove(paths.size() - 1);// 回溯}if (root.right != null) { // 右traversal(root.right, paths, res);paths.remove(paths.size() - 1);// 回溯}}
}

在这里插入图片描述

相关文章:

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

目录题目分析递归法题目来源 257. 二叉树的所有路径 题目分析 前序遍历以及回溯的过程如图&#xff1a; 递归法 1.递归函数参数以及返回值 要传入根节点&#xff0c;记录每一条路径的path&#xff0c;和存放结果集的result&#xff0c;这里递归不需要返回值&#xff0c;代…...

测试用例该怎么设计?—— 日常加更篇(下)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…...

Java基础:接口

1.接口的概念 当不是所有子类, 而是多个子类都包含一个方法时, 为了代码书写规范性, 可以用自定义的接口来统一该方法的书写规范. 所以接口可以看作是一种书写规则. 接口是对行为的抽象 抽象类一般是书写在父类当中, 接口是单独书写的, 不是一种类 2.接口的定义和使用 3.接口…...

vuex基础入门:uniapp实现用户登录授权实战

1.背景 vuex是数据共享方案之一,本文以微信小程序登录授权为例介绍一下vuex常用属性state、getters、mutations、actions. 2.基于uniapp实现微信小程序登录授权流程 1.凡是需要用户登录授权信息的页面创建时created方法中需要判断用户是否登录,需要使用本地缓存的token调用服务…...

Windows系统从权限维持角度进行应急响应

一、基本介绍 红队攻击者在对目标进行渗透利用后通常都会进行权限维持&#xff0c;以达到持续利用的目的。而作为防守方进行应急响应时&#xff0c;应该如何与技术高超&#xff08;jiaohuajianzha&#xff09;的攻击者斗智斗勇呢&#xff1f;或许可以通过本文可以找到答案。以…...

什么是DNS解析?如何提升DNS解析安全?

DNS解析是保障网站正常运行的一项重要服务&#xff0c;DNS解析出现故障&#xff0c;就会导致网站无法被访问或者被劫持到其他的站点&#xff0c;对业务正常开展造成很大影响&#xff0c;因此网站管理人员要高度关注DNS解析的安全&#xff0c;才能确保网站的正常运转&#xff0c…...

电路学习笔记

电源部分 2s锂电池 6.4v-8.4v INA180A2IDBVR 电流检测放大器 OUT ADC1_CH0 to ESP32 可能功能&#xff1a;电源电流监测 稳压/电压监测 OUT ADC1_CH1 to ESP32 降压至2.046v-2.686v并通过电容保持稳定 可能功能&#xff1a;降压模块,电压监测 LDO ASM1117-3.3 低压差线性…...

C# 数据结构

目录 一、介绍 二、数组 三、List&#xff08;列表&#xff09; 四、Dictionary&#xff08;字典&#xff09; 五、Queue&#xff08;队列&#xff09; 六、Stack&#xff08;栈&#xff09; 七、Hashtable&#xff08;哈希表&#xff09; 结束 一、介绍 数据结构是计…...

powerjob的worker启动,研究完了这块代码之后我发现了,代码就是现实中我们码农的真实写照

这是一篇让你受益匪浅的文章&#xff0c;代码即使人生。 worker启动比server启动要复杂一些&#xff0c;毕竟worker是要实际干活的&#xff0c;工欲善其事必先利其器&#xff0c;所以需要准备的工具还是不能少的&#xff0c;server对于powerjob来说&#xff0c;只是一个调度用的…...

配置Qt Creator

前言 为了使Qt Creator更像您最喜欢的代码编辑器或IDE&#xff0c;您可以更改键盘快捷键、配色方案、通用高亮显示、代码片段和版本控制系统的设置。 检查生成和运行设置 Qt Creator是一个集成开发环境(IDE)&#xff0c;可以用来开发Qt应用程序。虽然您可以使用Qt Installer…...

C++-类和对象(下)

C-类和对象&#xff08;下&#xff09;一&#xff0c;const成员函数二&#xff0c;再谈构造函数1&#xff0c;初始化列表2&#xff0c;explicit关键字三&#xff0c;static成员四&#xff0c;友元&#xff08;friend&#xff09;1&#xff0c;全局函数做友元2&#xff0c;类做友…...

什么是仓库管理?

仓库管理包括仓库日常运营所触及的准绳和流程。从较高的层次上讲&#xff0c;这包括接纳和组织仓库空间、布置劳动力、管理库存和完成订单。放大来看&#xff0c;你会发现有效的仓库管理触及到优化和集成这些过程中的每一个&#xff0c;以确保仓库操作的一切方面协同工作&#…...

对话系统学习概述(仅够参考)

对话系统&#xff08;仅够参考&#xff09; 目录对话系统&#xff08;仅够参考&#xff09;背景类人对话系统的关键特征1、知识运用2、个性体现3、情感识别与表达数据集评价方式评价的一些指标训练模型需要的资源任务型对话系统预训练最新研究进展参考文献背景 对话系统一般包括…...

免费CRM客户管理系统真的存在吗?不仅有,还有5个!

免费CRM客户管理系统真的存在吗&#xff1f;当然有&#xff01; 说到CRM客户管理系统&#xff0c;相信很多企业并不陌生&#xff0c;是因为CRM客户管理系统已经成为大多数企业最不可或缺的工具。但是对于很多小微企业和个人用户来说&#xff0c;购买和实施CRM的成本仍然难以承…...

C#开发的OpenRA使用自定义字典的比较函数

C#开发的OpenRA使用自定义字典的比较函数 字典是一个常用的数据结构, 因为它采用键值对的方式来保存数据, 这样非常方便程序里进行数据一对一的映射。 比如通过文件名称查找到文件对象,又者通过socket对象找到缓冲区对象。 由于字典是采用HASH算法,所以它的查找时间是非常快…...

DHCP协议

DHCP协议 文章目录DHCP协议DHCP作用及特点DHCP服务IP分配的三种方式DHCP协议中的报文类型DHCP服务工作流程抓包参考动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;&#xff0c;提供了一种 插网即用的技术。DHCP是一个应用层协议。当我们将…...

C语言进阶——自定义类型:枚举、联合

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;如果不去遍历世界&#xff0c;我们就不知道什么是我们精神和情感的寄托&#xff0c;但我们一旦遍历了世界&#xff0c;却发现我们再也无法回到那美好的地方去了。当我们开始寻求&#xff0c;我们就已…...

背景透明(opacity vs background)

最近在做项目的时候&#xff0c;遇到透明度的相关设置。 常用的背景透明设置可分为两种&#xff0c;分别是&#xff1a; 一是给background设置透明度。二是利用opacity属性。 在跳了一些坑之后&#xff0c;本人更推荐给background设置透明度&#xff0c;为什么呢&#xff1f;…...

华为OD机试 - 最小施肥机能效(Python)| 真题+思路+考点+代码+岗位

最小施肥机能效 题目 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完...

vue2 使用 cesium 篇

vue2 使用 cesium 篇 今天好好写一篇哈&#xff0c;之前写的半死不活的。首先说明&#xff1a;这篇博文是我边做边写的&#xff0c;小白也是&#xff0c;实现效果会同时发布截图&#xff0c;如果没有实现也会说明&#xff0c;仅仅作为技术积累&#xff0c;选择性分享&#xff0…...

31_AI短片实战第四弹:主观视角空间控制与分屏快速剪辑的AI生成策略(附提示词)

文章目录 一、第九镜:前方巨大峡谷——主观视角的空间精确控制 镜头设定 为什么这个镜头很难 迭代修正全记录 主观视角生成黄金法则 二、第十分镜:快速剪辑风格分屏——怪兽逼近与油门踩到底 镜头设定 尝试一次性生成 最终方案:拆分生成,后期合成 什么时候应该“拆开做”?…...

AI大会停车难?2026官方未公开的预约分流机制(附内测版停车码申领通道)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;2026年AI技术大会停车指引 为保障2026年AI技术大会&#xff08;Shanghai AI Summit 2026&#xff09;参会者高效、安全抵达主会场&#xff0c;主办方联合浦东智能交通调度中心部署了新一代AI泊车引导系…...

esptool芯片擦除功能全解析:全擦除与区域擦除的智能选择

esptool芯片擦除功能全解析&#xff1a;全擦除与区域擦除的智能选择 【免费下载链接】esptool Serial utility for flashing, provisioning, and interacting with Espressif SoCs 项目地址: https://gitcode.com/gh_mirrors/es/esptool esptool芯片擦除是ESP系列芯片开…...

10.数据库设计入门:从学生视角看三大范式与软性约定

目录 一、数据库设计&#xff1a;了解为主&#xff0c;少数记背 二、范式&#xff1a;软性约定&#xff0c;不是硬性规定 三、三大范式&#xff1a;简单了解&#xff0c;实践中体会 1. 第一范式&#xff08;1NF&#xff09;&#xff1a;列必须是“原子数据” 2. 第二范式&a…...

AI工具搭建自动化视频生成访问控制

# AI工具搭建自动化视频生成访问控制&#xff1a;从实战出发的理解 这东西到底是什么 前阵子有个朋友问我&#xff0c;他公司要做一批产品演示视频&#xff0c;每天几百个&#xff0c;人工做肯定不行。但问题是这些视频包含客户特定信息&#xff0c;不能所有人都能访问。这时候…...

ImageGlass:如何构建高效开源图像查看器,90+格式支持与模块化架构深度解析

ImageGlass&#xff1a;如何构建高效开源图像查看器&#xff0c;90格式支持与模块化架构深度解析 【免费下载链接】ImageGlass &#x1f3de; A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 在数字图像处理日益复杂的…...

告别手动拷贝DLL!用CMake+Qt 5.12管理Qgis 3.10依赖,实现跨平台环境一键部署

告别手动拷贝DLL&#xff01;用CMakeQt 5.12管理Qgis 3.10依赖&#xff0c;实现跨平台环境一键部署 在跨平台GIS应用开发中&#xff0c;手动管理Qt和Qgis的依赖项堪称开发者的噩梦。想象一下&#xff1a;每次新建项目都要复制数百MB的DLL文件&#xff0c;不同环境下的路径差异导…...

通过curl命令直接测试Taotoken大模型API的接入与响应

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令直接测试Taotoken大模型API的接入与响应 基础教程类&#xff0c;为需要在无SDK环境或快速排错的开发者&#xff0c;提…...

如何用嘎嘎降AI处理研究生毕业论文:硕士学位论文全流程降AI4.8元完整操作教程

如何用嘎嘎降AI处理研究生毕业论文&#xff1a;硕士学位论文全流程降AI4.8元完整操作教程 第一次用降AI工具会遇到很多不确定的地方——传什么格式、选哪个模式、怎么验收效果。 这篇教程把常见问题都覆盖了&#xff0c;主要基于嘎嘎降AI&#xff08;www.aigcleaner.com&…...

Win10/Win11下易语言调用大漠插件后台绑定游戏窗口的保姆级教程(含管理员权限避坑)

Win10/Win11下易语言调用大漠插件后台绑定游戏窗口的实战指南 最近在帮朋友调试一个游戏自动化工具时&#xff0c;遇到了一个棘手的问题&#xff1a;在Win11系统上&#xff0c;使用易语言调用大漠插件进行后台窗口绑定总是失败。经过三天三夜的调试和测试&#xff0c;终于摸清了…...