【Leetcode每日一题】 递归 - 二叉树的所有路径(难度⭐)(59)

1. 题目解析

题目链接:257. 二叉树的所有路径

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

针对二叉树路径的求解问题,我们可以采用深度优先遍历(DFS)的策略来寻找所有从根节点到叶子节点的路径。路径的存储采用字符串形式,确保在遍历过程中能够清晰记录节点间的连接关系。

具体实现步骤如下:

一、定义数据结构与初始化

  1. 创建一个结果数组 paths,用于存储所有从根节点到叶子节点的路径。
  2. 创建一个路径数组 path 或字符串 pathStr,用于临时存储当前遍历路径上的节点值。

二、递归遍历二叉树

  1. 从根节点开始递归遍历。
  2. 检查当前节点是否为空,若为空则直接返回,不进行任何操作。
  3. 将当前节点的值添加到路径数组 path 或字符串 pathStr 中。
  4. 判断当前节点是否为叶子节点,若是,则将路径数组 path 或字符串 pathStr 转换为字符串形式,并添加到结果数组 paths 中。
  5. 若当前节点不是叶子节点,则在路径字符串后添加连接符 "->",并递归遍历当前节点的左子树和右子树。
  6. 回溯处理:在递归遍历完当前节点的左子树或右子树后,需要将路径数组 path 或字符串 pathStr 中的最后一个元素移除,以便进行下一次遍历。

三、返回结果

当递归遍历完整个二叉树后,返回结果数组 paths,其中包含了所有从根节点到叶子节点的路径。

通过这种深度优先遍历的方式,我们能够确保遍历到二叉树中的每一个节点,并记录下从根节点到叶子节点的所有路径。在遍历过程中,利用字符串拼接和回溯处理,能够高效地构建和更新路径信息,最终得到完整的路径集合。

3.代码编写

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution 
{
public:
    vector<string> ret;
    vector<string> binaryTreePaths(TreeNode* root) 
    {
        string path;
        if(root == nullptr) return ret;
        dfs(root, path);
        return ret;
    }
    void dfs(TreeNode* root, string path)
    {
        path += to_string(root->val);
        if(root->left == nullptr && root->right == nullptr)
        {
            ret.push_back(path);
            return;
        }
        path += "->";
        if(root->left) dfs(root->left, path);
        if(root->right) dfs(root->right, path);
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.16 java项目小结1

java项目登录界面实现了服务端与客户端的连接&#xff0c;实现了客户端传递输入的账号和密码&#xff0c;服务端从数据库查询&#xff0c;并反馈给客户端。 学习了正则表达式 正则表达式的作用 作用一:校验字符串是否满足规则 作用二:在一段文本中查找满足要求的内容 目前我…

Python 包围盒裁剪卫星场景

下载 Landsat 场景 我们首先下载陆地卫星场景。您可以使用EarthExplorer门户来执行此操作。 数据下载后,您应该有一个下图所示的文件夹。这些是Landsat 2 级科学产品的所有可用文件。我们将处理突出显示的文件。这些是 3 个可见光波段和SR_stac文件。 加载图像和 stac 文件 …

PHP一句话木马

一句话木马 PHP 的一句话木马是一种用于 Web 应用程序漏洞利用的代码片段。它通常是一小段 PHP 代码&#xff0c;能够在目标服务器上执行任意命令。一句话木马的工作原理是利用 Web 应用程序中的安全漏洞&#xff0c;将恶意代码注入到服务器端的 PHP 脚本中。一旦执行&#xf…

Android Room 记录一个Update语句不生效的问题解决记录

代码展示 1.数据实体类 Entity public class User {PrimaryKey(autoGenerate true)private long id;private String name;private String age;private String sex;public User(String name, String age, String sex) {this.name name;this.age age;this.sex sex;}public …

Linux 磁盘管理和文件系统

硬盘的物理结构&#xff1a; 盘片硬盘有多个盘片&#xff0c;每盘片2面磁头每面一个磁头 硬盘的数据结构&#xff1a; 扇区盘片被分为多个扇形区域&#xff0c;扇区:每个扇区存放512字节的数据&#xff0c;硬盘的最小存储单位磁道同一盘片不同半径的同心圆&#xff0c;是由磁…

postgresql|数据库|实时数据库监控利器 pg_activity 的部署和初步使用

前言&#xff1a; postgresql的调优是比较重要的&#xff0c;那么&#xff0c;如何调优呢&#xff1f;自然是在某一个时间段内&#xff0c;通常是业务高峰期或者压测时间内实时观察数据库的运行情况&#xff0c;然后通过观察到的信息判断数据库的瓶颈&#xff0c;比如&#xf…

Windows 安装 A UDP/TCP Assistant 网络调试助手

Windows 安装 A UDP/TCP Assistant 网络调试助手 0. 引言1. 下载地址2. 安装和使用 0. 引言 需要调试一个实时在线聊天程序&#xff0c;安装一个UDP/TCP Assistant 网络调试助手&#xff0c;方便调试。 1. 下载地址 https://github.com/busyluo/NetAssistant/releases 2. 安…

【Android AMS】startActivity流程分析

文章目录 AMSActivityStackstartActivity流程startActivityMayWaitstartActivityUncheckedLocked startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume, boolean keepCurTransition)resumeTopActivityLocked 参考 AMS是个用于管理Activity和其它组件运行…

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…

chrome浏览器取消右上方的更新红点提示

在桌面找到chrome浏览器的快捷方式&#xff0c;右键打开属性 在目标 引号后添加 --disable-background-netwroking

git上传代码

git上传代码 先写好本地代码&#xff0c;按照下面步骤操作

初识--Linux的虚拟地址空间

重新了解地址空间 在学习c/c语言的时候,大家一定见过以下这张图 说的是程序会加载在如图的结构上,实际上,我们真的对他很了解吗,而在Linux进程控制这,就会有一个奇怪的现象 前提提要:简要介绍一下fork函数 进程内核数据结构(PCB)自己的代码以及数据 在Linux中,fork可以从当…

Docker Desktop 卡死在 “Starting the Docker Engine“问题解决

docker desktop启动卡死在这个界面长时间没有反应 wsl --status输入以上命令查看wsl状态&#xff0c;发现也是卡死的状态&#xff0c;长时间没有反应&#xff0c;猜测是因为WSL卡死导致的docker desktop卡死的 netsh winsock reset通过以上命令重置 重启电脑后问题解决

【南京艺术学院×朗汀留学】部分录取案例合集

留学申请正在紧张的进行中&#xff0c;作为深耕留学的专业资深团队&#xff0c;朗汀留学成功帮助上千名学生出国留学。 在此我们将部分留学案例作以总结&#xff0c;以供新生参考。再次恭喜所有获得理想大学offer的学生们&#xff0c;你们的努力让梦想照进现实。 学校介绍 南京…

用Scrapy抓取当当网站数据

setting.py实验目的及要求&#xff1a; 【实验目的】 通过本实验了解Scrapy爬虫框架&#xff1b;熟练掌握Scrapy的基本使用方法和常用技巧。 【实验要求】 使用Scrapy框架&#xff0c;抓取网站商品信息&#xff08;京东、淘宝、当当等任选一个&#xff09;&#xff0c;并将结…

实战 K8s ConfigMap:打造动态可配置的云原生应用

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s简介 2、ConfigMap简介 二、Con…

社交创新的标杆:解读Facebook的社交模式

引言 在当今数字化时代&#xff0c;社交媒体已成为人们日常生活和沟通的重要工具。作为全球最大的社交媒体平台&#xff0c;Facebook不仅改变了我们的社交模式&#xff0c;而且对全球的社交文化、商业活动和公共事务产生了深远的影响。本文将深入探讨Facebook的社交模式&#…

面试:lock 和 synchronized

一、语法层面 synchronized 是关键字&#xff0c;源码在jvm中&#xff0c;用c语言实现Lock 是接口&#xff0c;源码由jdk提供&#xff0c;用java语言实现使用synchronized时&#xff0c;退出同步代码块锁会自动释放&#xff0c;而使用Lock时&#xff0c;需要手动调用unlock方法…

数学建模完整版

模型与适用题型 微分方程传染病预测模型 神经网络 层次分析法 粒子群算法 matlab 优劣解距离法

停车资产数字化运营管理方案内容包括哪些?

随着新兴信息技术的蓬勃发展&#xff0c;如大数据、云服务、机器学习以及数字孪生等&#xff0c;停车行业正经历着前所未有的变革。这些技术的应用不仅推动了智慧停车领域的迅猛扩张&#xff0c;而且已成为全球各地数字化城市构建和城市治理现代化的关键驱动力。在数字化、平台…
最新文章