代码随想录-52-257. 二叉树的所有路径

news2025/7/9 9:15:28

目录

  • 前言
    • 题目
    • 1.递归和回溯
    • 2. 本题思路分析:
    • 3. 算法实现
    • 4. pop函数的算法复杂度
    • 5. 算法坑点

前言

在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
代码随想录此题链接

题目

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。
在这里插入图片描述
在这里插入图片描述

1.递归和回溯

  1. 遍历所有的路径,从头到尾,所以肯定是前序遍历,使用递归
  2. 并且需要遍历所有路径,必然是遇到叶子节点要往上回退,需要使用到回溯

2. 本题思路分析:

  1. 递归三部曲,第一步确定参数和返回值。
  • 参数应该是,当前节点,当前走过节点的列表,以及组成的字符串类型的列表
  1. 第二步确定递归截止条件,当遇到叶子节点,停止递归。
  • 叶子节点既是左右孩子均为空的节点,此时生成这条路的路径
  1. 第三步,单层递归逻辑
  • 因为是前序遍历,所以在截止条件前就必须先处理中间节点,既是将中间节点加入到路径数组中(paths中),
  • 截止条件判断
  • 之后就是处理左右孩子,判断左右孩子是否为空,不为空则递归,并且递归结束还需要回溯,删除路径数组中最后一个元素。

3. 算法实现

  • 代码:
    //递归法(后序遍历)因为是求高度,所以是后序遍历
class Solution {
//整体是前序遍历
public List<String> binaryTreePaths(TreeNode root) {
    List<String> result = new ArrayList();
    List<Integer> paths = new ArrayList();
    getPath(paths,result,root);
    return result;
}

public void getPath(List<Integer> paths,List<String> pathStrs,TreeNode root){
    //需要加入当前节点  前序中首先是“中”,之后才是“左”、“右” 
    paths.add(root.val);
    if(root.left == null && root.right == null){//终止条件:遇到叶子节点
        //则将遇到的所有paths转换成str
        StringBuilder path = new StringBuilder("");
        for(int i = 0;i < paths.size() - 1;i++){
            path.append(paths.get(i)).append("->");
        }
        pathStrs.add(path.append(paths.get(paths.size() - 1)).toString());
    }
    //???单层递归循环
    if(root.left != null){
       getPath(paths,pathStrs,root.left);
       paths.remove(paths.size() - 1);//ArrayList删除的API,删除指定下标的元素
    }
    if(root.right != null){
       getPath(paths,pathStrs,root.right);
       paths.remove(paths.size() - 1);
    }

}
}

4. pop函数的算法复杂度

暂无

5. 算法坑点

暂无

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

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

相关文章

【数字孪生百科】每周认识一个数字孪生要素 ——柱形图(Histogram, Column Diagram)

简介柱形图&#xff08;Histogram, Column Diagram&#xff09;&#xff0c;又称柱状统计图、条状图、长条图或者条形图&#xff0c;是一种以宽度相同的长方形的长度为变量的统计图表。一般来说&#xff0c;柱形图只有一个变量&#xff0c;比较适用于较小数据集的分析。柱形图同…

HHO:闯进耳机赛道的外行人,却给整个行业带来了光

数字化时代的耳机&#xff0c;应该是什么样的&#xff1f;如果是一位在行业浸润多年的专业人士&#xff0c;对这个问题给出的答案应该是&#xff1a;更加细腻真实的音质、更好的降噪效果、更舒适的佩戴体验……作为原阿里巴巴集团副总裁、钉钉创始人CEO&#xff0c;踏上创业之路…

【RuoYi-Vue-Plus】学习笔记 49 - Easy Excel(三)自定义转换器 ExcelDictConvert 源码分析

文章目录前言参考目录框架集成1、Maven2、框架集成模块 ruoyi-common-excel2.1、自定义转换器 ExcelDictConvert2.2、自定义转换器注解 ExcelDictFormat2.3、Excel 工具类 ExcelUtil3、测试方法3.1、用户导入3.2、用户导出3.3、测试调用流程说明执行流程分析1、用户导出流程分析…

Dynamics 365如何动态设置表单上字段标签label的tooltips提示语。

客户要求定制一下光标放在字段标签上的tooltips提示语言。如果是静态的&#xff0c;可以去后台实体字段编辑页面直接修改字段的描述信息即可。 但是这里要求改成动态的显示形式&#xff1a;“ABC”当前用户当前时间的yyyyMMddHHmm格式的字符串。 表单onload中调用的JS函数Rese…

第十四届蓝桥杯第三期模拟赛B组C/C++原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

centos7 oracle19c安装 ORA-01012: not logged on

总共分三步 1.下载安装包:里面有一份详细的安装教程 链接&#xff1a;https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码&#xff1a;8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…

Java介绍,什么是Java?

同学们好&#xff01; 第一次接触软件行业吗&#xff1f;没有关系&#xff0c;看完这篇介绍让你了解到底什么是Java&#xff1f;并对它强大的功能所吸引。希望你能耐心的看完&#xff0c;更了解软件行业&#xff0c;了解Java开发。 1、是不是不知道什么是Java&#xff1f; 官…

港科夜闻|沈向洋教授获委任为香港科大校董会主席

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、沈向洋教授获委任为香港科大校董会主席。该委任由2023年3月6日起生效&#xff0c;为期3年。沈教授将接替现任校董会主席廖长城先生。而廖先生亦于今天获委任为大学最高咨询机构「顾问委员会」的新一任主席&#xff0c;接替成…

pandas数据分析(二)

文章目录DataFrame数据处理与分析读取Excel文件中的数据筛选符合特定条件的数据查看数据特征和统计信息按不同标准对数据排序使用分组与聚合对员工业绩进行汇总DataFrame数据处理与分析 部分数据如下 这个数据百度可以搜到&#xff0c;就是下面这个 读取Excel文件中的数据 …

JVM实战OutOfMemoryError异常

目录 Java堆溢出 常见原因&#xff1a; 虚拟机栈和本地方法栈溢出 实验1&#xff1a;虚拟机栈和本地方法栈测试&#xff08;作为第1点测试程序&#xff09; 实验2&#xff1a;&#xff08;作为第1点测试程序&#xff09; 运行时常量池和方法区溢出 运行时常量池内存溢出 …

模型压缩技术综述

当今&#xff0c;随着深度学习技术的不断进步&#xff0c;越来越多的大型多模态模型被应用于自然语言处理、计算机视觉等领域。然而&#xff0c;这些模型往往需要数十亿甚至上百亿的参数&#xff0c;不仅训练时间长、计算资源消耗大&#xff0c;而且在实际应用中也会受到硬件、…

android sdk分析工具uiautomatorviewer.bat启动报错

位于android sdk目录android-sdk\tools\bin下的分析工具uiautomatorviewer.bat启动报错&#xff1a; uiautomatorviewer.bat -Djava.ext.dirs..\lib\x86_64;..\lib is not supported. Use -classpath instead. Error: Could not create the Java Virtual Machine. Error: A fa…

20张图带你彻底了解ReentrantLock加锁解锁的原理

哈喽大家好&#xff0c;我是阿Q。 最近是上班忙项目&#xff0c;下班带娃&#xff0c;忙的不可开交&#xff0c;连摸鱼的时间都没有了。今天趁假期用图解的方式从源码角度给大家说一下ReentrantLock加锁解锁的全过程。系好安全带&#xff0c;发车了。 简单使用 在聊它的源码…

浅谈Spring6之P和C命名空间注入的区别

基于P命名空间注入 P命名空间注入是简化构造方法的注入 使用P命名空间注入的两个条件 一&#xff1a;xmlns:p"http://www.springframework.org/schema/p" 二&#xff1a;提供set方法class类 Spring_p.xml配置<!--P命名注入底层是set注入><bean id"dogB…

anaconda的linux版本以及jupyter的安装和DataSpell连接linux的jupyter服务器

anaconda安装&#xff1a;官网&#xff1a;https://www.anaconda.com/拷贝下载网址后&#xff0c;在Linux里进行下载&#xff1a;wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh执行sh&#xff1a;./Anaconda3-2022.10-Linux-x86_64.sh 安装完后&a…

webpack指南(优化篇)——webpack项目优化

系列文章目录 webpack指南&#xff08;基础篇&#xff09;——手把手教你配置webpack 文章目录系列文章目录前言一、概述二、传输性能优化1.代码压缩1.1 css压缩1.2 js压缩1.3 进一步压缩js1.4 压缩html1.5图片压缩2.摇树优化(Tree Shaking)3.作用域提升4.抽取公共模块&#x…

python+selenium自动化测试解决不了的alert问题,使用PyKeyboard解决方法

在python自动化测试中&#xff0c;面对浏览器弹出的对话框&#xff0c;python自带的alert可能解决不了关闭弹框&#xff0c;这时候可以引入PyKeyboard来解决下载并安装pyHook-1.5.1-cp36-cp36m-win_amd64.whl&#xff0c;下载地址https://www.lfd.uci.edu/~gohlke/pythonlibs/&…

你需要知道的云计算常识

云计算常识_基础阶段云计算服务器架构的演进云计算能够提供什么价值&#xff1f;谁为云计算提供服务&#xff1f;计算机的组成部分进制转换云计算 服务器架构的演进 Mon 06Mon 13Mon 20裸金属 虚拟机 云主机(云平台) 容器&#xff08;云原生&#xff09; serviceless(无服务) …

基于VC+MSSQL开发的医院PACS系统全套源代码 强大的三维重建功能

医院PACS系统源码 PACS源码 一套医学影像存储与传输系统&#xff0c;PACS部分主要提供医学影像获取、影像信息网络传递、大容量数据存储、影像显示和处理、影像打印等功能。RIS主要提供分诊登记、叫号、检查报告生成和打印等功能。本套影像存储与传输系统将二者进行无缝对接&a…

CHAPTER 4 文件共享 - Samba

文件共享 - Samba1 Samba1.1 Samba的软件架构1.2 搭建Samba服务器1.3 samba用户管理1. 添加用户2. 修改用户密码3. 删除用户和密码4. 查看samba用户列表5. 查看samba服务器状态1.4 samba共享设置&#xff08;配置文件详解&#xff09;1.5 访问共享目录1. windows访问2. linux客…