(刷题笔记)Leetcode 257.二叉树的所有路径

LeetCode257二叉树的所有路径 算法特点及适用场景特点利用深度优先搜索结合回溯的思想,清晰地实现了对二叉树从根节点到所有叶子节点路径的查找和记录,代码结构通过递归和合理的回溯操作体现了二叉树的层次结构特点,易于理解和实现。通过在遍历过程中动态地记录和构建路径字符串,能够准确地获取二叉树的所有路径信息。时间复杂度为 ,在节点数量不是特别庞大时,可以有效地获取二叉树的所有路径,但随着节点数增多,计算量增长相对较快,效率会有所下降。适用场景。 阅读详情

题目

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

输入:

     1
   /   \ 
  2     3
   \
    5

输出: [“1->2->5”, “1->3”]

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-paths

解题思路

这道题本质上是二叉树的中序遍历,只是需要一边遍历一边记录路径。
所以可以维护一个栈,记录中序遍历的结点和访问该结点经过的路径。
1.申请一个可以记录TreeNode和string的栈,一个指向root的临时变量temp
2.当栈非空或者temp不指向NULL时进行以下操作

  • 当temp不指向NULL时
+ a.判断temp是否与root相等,若相等则说明是路径开头,此处str=to_string(temp->val)
    若不相等,说明不是路径开头,str=str+“->”+to_string(temp->val) 
+ b.将temp和str存在栈中
+ c.继续向左遍历,temp=temp->left
  • 当temp指向NULL后
+ a.给temp和str重新赋值,为栈顶元素
+ b.判断temp的左右结点是否为NULL,若是,则找到一条路径,将str存入结果vector中,若不是,不进行操作。
+ c.继续向右遍历,temp=temp->right

3.跳出2的循环之后返回结果vector

知识点总结

  • 二叉树的遍历

    • 前序遍历:先访问根结点,然后遍历左子树,最后遍历右子树。
    • 中序遍历:先遍历左子树,然后访问根结点,最后遍历右子树。
    • 后序遍历:先遍历左子树,然后遍历右子树,最后访问根结点。
    • 层序遍历:从根结点从上往下逐层遍历,在同一层按从左往右的顺序逐个访问结点。
      参考:二叉树的四种遍历方式
  • pair的用法

    • 功能:将一对值(可能是不同类型)结合在一起(T1 和 T2)。可以通过其公共成员访问各个值first和second。
    • pair类型定义在#include 头文件中
    • 创建和初始化
      • 创建:在创建pair对象时,必须提供两个类型名,两个对应的类型名的类型不必相同。例pair<string, int> word_count;
      • 初始化:pair<string, int> name_age(“Tom”, 18); pair<string, int> name_age2(name_age);

代码(C++)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {

        vector<string>  vec;
        stack<pair<TreeNode*,string>> st;
        TreeNode* temp=root;
        string str;
        while(!st.empty()||temp){

            while(temp){
                if(temp==root){
                    str=str+to_string(temp->val);
                }
                else{
                    
                    str=str+"->"+to_string(temp->val);
                }
                st.push(pair<TreeNode*,string>(temp,str));
                temp=temp->left;
            }
            temp=st.top().first;
            str=st.top().second;
            st.pop();
            if(temp->right==NULL&&temp->left==NULL){
                vec.push_back(str);
            }
            temp=temp->right;
             
        }

        return vec;

    }
};

递归版本

递归版本的思想是深度优先搜索,需要注意的是引用传值的应用。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:

    void dfs(TreeNode* root,string path,vector<string> &res){
        
        if(root==NULL) return;
        path=path+to_string(root->val);
        if(root->left==NULL&&root->right==NULL){
            res.push_back(path);
        }
        else{
            path+="->";
        }
        dfs(root->left,path,res);
        dfs(root->right,path,res);
    }
    vector<string> binaryTreePaths(TreeNode* root) {

        vector<string> res;
        string path;
        dfs(root,path,res);
        return res;

       
    }
};
WebVTT中的文本轨道(Text Tracks,TT)到底是什么鬼? WebVTT,全称是The Web Video Text Tracks Format,意思是网络视频文本轨道格式。那么到底什么是文本轨道(Text Tracks)呢?这篇文章希望一探究竟。 阅读详情

相关推荐

详解在linux上安装vpn客户端

详解在linux上安装vpn客户端

FuncPlotCalc 8428

力扣(leetcode)第257题二叉树的所有路径(Python)

最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。输入:root = [1,2,3,null,5]输出:[“1->2->5”,“1->3”]树中节点的数目在范围 [1, 100] 内。叶子节点 是指没有子节点的节点。输入:root = [1]

qq_58737789的博客 671

别再只会用串口助手了!手把手教你用手机App调试HC-05蓝牙模块(STM32F103实战)

本文详细介绍了如何利用手机App调试HC-05蓝牙模块与STM32F103的无线连接,突破传统串口助手的限制。通过实战指南,开发者可以掌握移动性测试、实时监控和快速验证等高效调试技巧,优化蓝牙透传的稳定性和性能。

weixin_33670786的博客 428

LeetCode257. 二叉树的所有路径

本文为LeetCode257. 二叉树的所有路径解析,欢迎学习!

Toby的博客 764

PyTorch复现EEG-TCNet踩坑记:从BCI IV2a数据到TCN块缺失的完整解决方案

本文详细解析了使用PyTorch复现EEG-TCNet模型的全过程,重点解决了BCI IV2a数据集预处理和TCN模块缺失的技术难题。通过标准化数据流程、跨受试者验证策略以及三种因果卷积实现方案,为运动想象分类任务提供完整解决方案,帮助研究者高效实现模型复现与优化。

weixin_30699955的博客 319

Qwen-Image-2.1本地图像生成整合包:8G显存一键部署指南

文生图模型是AI视觉创作的核心技术,其本地化部署需兼顾模型能力、硬件适配与工程易用性。Qwen-Image-2.1作为支持文本生成、图像编辑与多图参考的统一架构模型,突破了传统Diffusion模型在消费级显卡上的运行瓶颈。通过AWQ量化、vLLM推理优化与ComfyUI节点重构,实现8G显存稳定运行,显著降低CUDA环境配置复杂度。该方案面向设计师、教师与普通用户,提供开箱即用的本地AI图像工作流,适用于电商主图迭代、教学配图生成与IP角色延展等真实场景,让高质量图像生成真正走出云端,落地桌面。

weixin_29082143的博客 398

二叉树13:二叉树的所有路径

LeetCode257:给定一个二叉树,返回所有从根节点到叶子节点的路径。 1.深度优先的递归写法 深度优先搜索就是从根节点开始,一直往左子节点走,直到左子节点为空,让后返回到上一步从右子节点在执行同样的操作,就像下面图中这样: 二叉树的深度优先搜索代码如下: public static void treeDFS(TreeNode root) { //当前节点为空直接返回 if (root == null) return;..

纵横千里 捭阖四方 的专栏 620

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 466

LeetCode第257题 - 二叉树的所有路径

LeetCode第257题 - 二叉树的所有路径

流水账 635

【存储原理】IO超时处理 块层block-scsi层之间

【存储原理】IO超时处理 块层block-scsi层之间

sinat_37817094的博客 1024

利用ADS建立MIPI D-PHY链路仿真流程

由于MIPI D-PHY的速率并不算高,因此,PCB设计难度通常不大,主要做好差分线的等长、阻抗的连续性、端口处的阻抗优化以及控制好走线的长度,拿到满意的结果还是较为轻松的,最后,建立流程化的仿真工程文件,可以保存为模板,方便日后的设计复用,非常方便。

一只豌豆象的博客 3571

关于二叉树,你该了解这些!

我们要开启新的征程了,大家跟上!

代码随想录 923

MAC(m1)-VMWare Fusion安装CentOS7.9

MAC(m1)-VMWare Fusion安装CentOS7.9

兴趣是最好的老师 1768

【刷题笔记】2、二叉树所有路径-力扣257

力扣257题,关于二叉树路径问题的基础题

wz_zzz的博客 367

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Leetcode刷题笔记 257. 二叉树的所有路径

257. 二叉树的所有路径 时间:2020年9月4日 知识点:dfs 题目链接:https://leetcode-cn.com/problems/binary-tree-paths/ 题目 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例 输入: 1 / \ 2 3 \ 5 输出: [“1->2->5”, “1->3”] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

cjl的博客 406

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

leetcode-257. 二叉树的所有路径刷题笔记(c++)

写在前面 难度:简单 递归遍历 / 深度优先遍历(dfs) 题目详情 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3 ac代码 解题思想 递归迭代 for循环逆序拼装(左右均可能有多个路径) 递归迭代变量、数组值/大小关系!

kngines 400

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LeetCode刷题笔记257:二叉树的所有路径(Python实现)

题目描述: 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明:叶子节点是指没有子节点的节点。 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3 Solution: 运用递归的思想,从根节点遍历二叉...

FiveStarsGeneral的博客 841

Leetcode刷题笔记题解(C++):257. 二叉树的所有路径

【代码】Leetcode刷题笔记题解(C++):257. 二叉树的所有路径。

Demo.demo的博客 428

力扣刷题笔记17| 110.平衡二叉树 、257. 二叉树的所有路径 、 404.左叶子之和

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。输入:root = [3,9,20,null,null,15,7]一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。输入:root = [1,2,3,null,5]给定一个二叉树,判断它是否是高度平衡的二叉树。输出:["1->2->5","1->3"]叶子节点 是指没有子节点的节点。

qq_45348845的博客 136

leetcode刷题笔记——深度优先搜索

leetcode刷题笔记——深度优先搜索 目前完成的深度优先搜索相关的leetcode算法题序号: 简单:257 中等:200 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reconstruct-itinerary 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 文章目录leetcode刷题笔记——深度优先搜索算法理解一、257题:二叉树的所有路径1.题干2.思路3.代码4.总结二、200题:岛屿数量1.题干2.思路3.代码

md_Ji的博客 604

LeetCode第257题_二叉树的所有路径

摘要 LeetCode第257题"二叉树的所有路径"要求返回从根节点到所有叶子节点的路径。题目采用递归深度优先搜索(DFS)方法,遍历二叉树时记录路径,当遇到叶子节点时保存完整路径。时间复杂度O(n),空间复杂度O(h)。此外也可用广度优先搜索(BFS)迭代实现。代码示例提供了C#、Python和C++实现,均通过测试用例。

qq_40263592的博客 2282

【二叉树】【回溯】二叉树的所有路径详解【力扣.257】超详细的宝藏教程

【二叉树】【回溯】二叉树的所有路径详解【力扣.257】超详细的宝藏教程 干货满满,不收藏绝对后悔!

系统编程、网络编程 2780

二叉树所有路径求解(力扣257)

以上就是针对这道题的刷题笔记,讲解了怎么用递归以及回溯求解二叉树的所有路径问题,用前序遍历遇到叶子结点时则回溯到上面去重新遍历,还用到了stringbuilder来拼接字符串。

Huahua_1223的博客 1395

leetcode(力扣)刷题笔记(c++、python)【上】

力扣刷题顺序以及用不同语言解答过程

qq_43050258的博客 3699

【力扣刷题实战】二叉树的所有路径

文章目录目录力扣题目:二叉树的所有路径题目描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)兄弟们共勉 !!! 每篇前言原题链接:257. 二叉树的所有路径 - 力扣(LeetCode)给你一个二叉树的根节点 ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。示例 1: 输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"] 示例 2: 输入:root = [1

2401_85548793的博客 1133

递归-二叉树中的深搜-257.二叉树的所有路径-力扣(LeetCode)

个人主页:1白天的黑夜1-优快云博客专栏:力扣刷题录_1白天的黑夜1的博客-优快云博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-优快云博客目录一、题目解析二、算法原理解法:递归+前序遍历根据我们的模拟和前序遍历,我们开始编写递归代码1、重复的子问题--设计函数头2、某一个子问题做了什么--设计函数体3、递归出口4、回溯5、细节问题在前面我们简单接触和认识了剪枝,今天又来了位新朋友回溯,在未来的学习中会逐步加深它们俩的概念。根据上面的模拟和递归函数的设计,自己尝试编写代码,提升自己

black_bear_white的博客 636
上一篇: (刷题笔记)Leetcode 235.二叉搜索树的最近公共祖先
下一篇: (刷题笔记)Leetcode 1022.从根到叶的二进制之和
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值