【简单】257. 二叉树的所有路径(后序遍历非递归+前序遍历递归+非递归)

MATLAB算法实战应用案例精讲-【数模应用】装箱问题 装箱问题可以根据不同的维度进行分类。以下是一些常见的装箱问题二维装箱问题:二维装箱问题假设所有物品都是平面上的矩形,并且需要将它们放入平面上的容器中。这个问题的目标是找到一种装箱方案,使得物品不重叠并占据的总面积最小。三维装箱问题:三维装箱问题考虑到物品可以具有高度,并且需要将它们放入三维容器(如箱子或货柜)中。目标是找到一种装箱方案,使得物品不重叠且总体积最小。多维装箱问题:多维装箱问题是指在更高维度空间中进行装箱的问题。除了长度和宽度之外,物品可能具有其他属性,如高度、重量、形状等。 阅读详情

【题目】
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。
来源:leetcode
链接:https://leetcode-cn.com/problems/binary-tree-paths/
【示例】
输入:
1
/ \
2 3
\
5
输出: [“1->2->5”, “1->3”]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
【后序遍历】
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗 :12.4 MB, 在所有 C++ 提交中击败了8.00%的用户

/**
 * 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 {
private:
    vector<string> rs;
    stack<TreeNode*> s,back;
public:
    void deal(){
        string str="";
        while(!s.empty()){
            back.push(s.top());
            s.pop();
        }
        while(!back.empty()){
            s.push(back.top());
            str+=to_string(s.top()->val);
            if(back.size()>1)
                str+="->";
            back.pop();
        }
        rs.push_back(str);
    }
    vector<string> binaryTreePaths(TreeNode* root) {
        TreeNode* node=root,*last=NULL;
        while(!s.empty()||node){
            while(node){
                s.push(node);
                node=node->left;
            }
            if(!s.empty()){
                node=s.top();
                if(node->right&&node->right!=last){
                    node=node->right;
                }else{
                    if(!node->left&&!node->right)
                        deal();
                    s.pop();
                    last=node;
                    node=NULL;
                }
            }
        }
        return rs;
    }
};

【前序遍历的递归版】
执行用时 :8 ms, 在所有 C++ 提交中击败了56.64% 的用户
内存消耗 :14.1 MB, 在所有 C++ 提交中击败了8.00%的用户

/**
 * 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 {
private:
    vector<string> rs;
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        if(!root)   
            return {};
        preOrder(root,to_string(root->val));
        return rs;
    }
    void preOrder(TreeNode* root,string path){
        if(!root->left&&!root->right){
            rs.push_back(path);
            return;
        }
        if(root->left)
            preOrder(root->left,path+"->"+to_string(root->left->val));
        if(root->right)
            preOrder(root->right,path+"->"+to_string(root->right->val));
    }
};

【前序遍历非递归版】
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗 :12.3 MB, 在所有 C++ 提交中击败了12.00%的用户

/**
 * 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:
    stack<pair<TreeNode*,string>> s;
    vector<string> rs;
    vector<string> binaryTreePaths(TreeNode* root) {
        if(!root)
            return {};
        pair<TreeNode*,string> node=pair<TreeNode*,string>(root,to_string(root->val));
        s.push(node);
        while(!s.empty()){
            node=s.top();
            s.pop();
            if(node.first->right)            
                s.push(pair<TreeNode*,string>(node.first->right,
                node.second+"->"+to_string(node.first->right->val)));
            if(node.first->left)    
                s.push(pair<TreeNode*,string>(node.first->left,
                node.second+"->"+to_string(node.first->left->val)));
            if(node.first->left==NULL&&node.first->right==NULL)
                rs.push_back(node.second);
        }
        return rs;
    }
};
2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析 阅读详情

相关推荐

Rstudio安装org.Hs.eg.db

自己也是个小白,初次安装org.Hs.eg.db碰到好多问题,步骤总结如下: 第一,instal.packages()安装,不行则换 BiocManager::install() 第二,如BiocManager不成,说明不是最新版本,可按提示安装最新版 BiocManager::install(version = '3.13') #由于R版本较新,按照提示中的相关信息,安装最新版本的 第三,再次安装 BiocManager::install("org.Hs.eg.db") 第四,之后每个人.

ZH_DDong的博客 2万+

二叉树输出全部路径问题的非递归式解决方案

问题:对于一棵二叉树,输出所有从根结点到叶子结点的路径。主要思路是和二叉树的非递归式后序遍历差不多,都是先用一个栈来存储已经访问过的结点,直至遍历完它自己、它的左子树、它的右子树。但是后序遍历和其它两种遍历方式还是有些不同,前序遍历的过程是:结点入栈-->访问结点-->访问左子树-->返回结点-->结点出栈-->访问右子树;中序遍历的过程是:结点入栈-->访问左子树-->返回结点-->访问结点-->

2474

合成孔径雷达(SAR)的常见工作模式

随着星载SAR技术研究的深入发展,单一的条带模式已经无法满足当今时代的需求,因此许多新的工作模式相继被提出。这些新模式在分辨率和测绘宽度等方面都有所提高,接下来将简要介绍几种常用的工作模式。

m0_51390495的博客 2317

二叉树中从根结点到叶子结点所有路径(非递归实现)

非递归实现输出二叉树中从根节点到叶子节点的所路径,我们用非递归的方法实现。我们在存储节点时,用一个标记域标记从当前节点出发的所有路径是否已经被访问过。如果当前节点的所有路径都被访问过,则标记域为一,只要有一条路径没有被访问过,那么标记域就是零。//存储路径的数组(存储的是当前节点的指针) vector path(10, NULL); //非递归实现从根节点到叶子节点的全路径(前序遍历二叉树的思想

yang20141109的专栏 4308

NGSIM数据集字段解析:从车辆轨迹到交通行为分析

本文深度解析NGSIM数据集的核心字段及其在交通行为分析中的应用。详细解读了车辆时空定位、状态属性及交互关系等关键字段,并通过高速路“幽灵堵车”和城市路口左转行为两个实战案例,展示了如何利用该数据集进行微观交通行为建模与驾驶特征提取,为交通流研究和自动驾驶算法测试提供数据基础。

weixin_29172963的博客 148

2025.06.18【转录组】|Ribo-seq/small RNA数据分析:rRNA和smRNA比对率统计全流程

本文介绍了一种自动化统计rRNA/smRNA比对率的方法,用于评估Ribo-seq或small RNA测序数据的质量。主要内容包括:分析原理(比对率定义、参考序列来源)、实践流程(构建索引、比对统计)以及结果可视化方法。通过Python和R脚本实现自动化处理,可生成汇总表格和柱状图。比对率结果能反映样品污染程度,建议控制在20%以下。该流程有助于快速评估测序质量,为后续分析提供可靠依据。文中还提供了常见问题解决方案和脚本示例,适用于生物信息学标准化质控环节。

1619

数据结构编程回顾(四) 二叉树的三种非递归遍历以及根节点到任意节点的路径

题目四:求二叉树上结点的路径 设计要求:在采用链式存储结构存储的二叉树上,以bt 指 向根结点,p 指向任一给定的结点,编程实现求出从根结点 到给定结点之间的路径。 菜单内容: 1. 建立二叉树存储结构 2. 求二叉树的前序遍历 3. 求二叉树的中序遍历 4. 求二叉树的后续遍历 5. 求指定结点的路径 6. 退出系统 请选择:1 – 6: 提示: 【采用非递归遍历的方法】 1. 二叉树的建立 2...

Type真是太帅了 3474

Flow Match 原理 及应用

Flow Matching(流匹配)是生成模型的范式革命——用确定性ODE替代随机扩散过程,在自动驾驶轨迹预测中实现10倍采样加速和更高生成质量。更快的采样速度:通常只需 10-50 步就能生成高质量样本更稳定的训练:避免了传统扩散模型中复杂的噪声调度理论基础:基于连续正规化流(Continuous Normalizing Flows)核心思想:Flow Matching 通过学习一个 向量场(vector field) 来直接建模从噪声分布到目标分布的连续变换路径。

@bangbang的博客 104

【js】获取树的所有路径

js如何查找树的所有路径?

九日的博客 2601

出现 RuntimeError: adaptive_avg_pool2d_backward_cuda does not have a deterministic implementation的解决方法

大致就是在执行主函数的训练函数中,在反向传播这一块出现了问题。解决方法就是添加如下代码块。找到提示bug的行数。

码农研究僧的博客 5533

【技能】OpenClaw Skills学习及手搓一个极简skill

本文介绍了OpenClaw Skills的基础概念与使用方法。Skills是OpenClaw代理使用工具的核心载体,通过SKILL.md文件定义技能属性和执行方式。技能加载遵循"工作区>本地>内置>自定义目录"的优先级规则。用户可通过ClawHub一键安装现成技能,也可自定义开发技能:创建技能目录,编写包含YAML元数据和执行指令的SKILL.md文件,放置于工作区skills目录进行测试。文章还介绍了多代理场景下的技能共享、插件集成以及安全注意事项,包括沙箱使用和敏感

海兰 3977

javascript树形结构根据子节点遍历所有父节点 获取全路径 el-cascader树形结构回显

实测根据情况调用两种之一,结果如下图,数组形式,配合Element-ui级联选择器。data为树结构数据,id为子节点的id,indexArray默认给个[]就可以。就可以直接回显数据了。

weixin_60382322的博客 2161

Camera2Demo

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

【257. 二叉树的所有路径 简单】

本文我们开始初步涉及到了回溯,很多同学过了这道题目,可能都不知道自己其实使用了回溯,回溯和递归都是相伴相生的。

yuan_2001_的博客 1227

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深度优先搜索DFS:递归和非递归的写法257. 二叉树的所有路径

1、题目描述: 2、题解: 方法1:DFS递归: 二叉树的前序遍历 设置一个全局的数组paths,然后进行DFS 在DFS里, 遇到非空的节点就返回 把节点加入到path中, 遇到叶子结点就把path加入到paths中, 否则就添加'->'到path中 访问左子树 访问右子树 python代码如下: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # s

weixin_42042056的博客 494

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

257. 二叉树的所有路径

至于非递归的方式,我们可以依然可以使用前序遍历的迭代方式来模拟遍历路径的过程,这里除了模拟递归需要一个栈,同时还需要一个栈来存放对应的遍历路径。然后是递归和回溯的过程,上面说过没有判断cur是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。此时还没完,递归完,要做回溯啊,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。所以递归前要加上判断语句,下面要递归的节点是否为空,如下。

gyjllll的博客 1166

二叉树 广度遍历 深度遍历 前序 中序 后序

二叉树

chixushuchu的博客 361

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

视频链接:后序遍历求高度,高度判断是否平衡 | LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com, 这里刷题顺序,详细题解,应有尽有!,「六分钟速通」平衡二叉树(AVL树)的插入与删除,贪心算法理论基础!,数据结构——超级简单五分钟搞定平衡二叉树的调整,每次写递归都要靠直觉?这次带你学透二叉树的递归遍历!

qq_73932604的博客 1207

代码随想录——二叉树 刷题记录

因为是二叉搜索树,所以需要对比当前节点和pq的节点值,如果当前小于pq则在右子树中寻找,如果当前大于pq则从左子树寻找,如果刚好在pq之间,则该节点就是最近公共祖先。注意当其中一个树的节点不存在时,直接返回存在的节点(带着孩子)就好,不需要新建节点,如果新建节点,则该节点后续孩子还需要处理。一定注意返回值,返回树的根节点,那么当该节点不是删除的节点时,需要改变左右孩子进行递归然后返回自身。处理节点的左孩子时,如果左孩子节点删除,则需要该节点的左孩子定位到原来左孩子的右孩子,可以多做几遍。

qq_43541423的博客 2259

257.二叉树的所有路径

然后是递归和回溯的过程,上面说过没有判断cur是否为空,那么在这里递归的时候,如果为空就不进行下一层递归了。这个回溯有一个很大的问题,回溯和递归是一一对应的,有一个递归,就要有一个回溯,所以需要将两者放在一起。这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。此时还没完,递归完,要做回溯,因为path不能一直加入节点,它还要删节点,然后才能加入新的节点。因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。

qq_46130027的博客 275

Day20 222完全二叉树的节点个数 110平衡二叉树 257二叉树的所有路径

本题先不把它当成完全二叉树来看,用广度优先和深度优先搜索分别遍历,也能达到目的,只要将之前的代码稍加修改即可。注意后序遍历时的result要加上自身本身的那个结点。既然本题给出了条件完全二叉树,那就可以用完全二叉树的方法来做。可以继续使用递归法,终止条件要稍微变一下,要根据左右深度是否相同来判断子树是不是满二叉树,如果是的话就返回2的n次方-1,不是的话就继续递归。为什么左右深度相等就一定是满二叉树呢,这取决于完全二叉树的特性,也就是最后那层肯定是连续的,不存在中间为空的情况。

2303_77739929的博客 1186

从零备战蓝桥杯——二叉树及相关题目(基础篇)

零基础小白也可以看,蓝桥杯,备战,leetcode,二叉树,二叉搜索树,lca,acm,dpf,dfs

c0re的博客 2506

【Leetcode 专题一(树专题)】前、中、后、层次遍历、二叉搜索树、二叉树修改构造、二叉树的一些特殊递归

目录一、前序遍历1.0、前序框架模板1.1、经典题目二、中序遍历2.0、中序框架模板三、后续遍历3.0、后序框架模板四、层次遍历4.0、层次框架模板 一、前序遍历 1.0、前序框架模板 144. 二叉树的前序遍历 递归写法 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val

qq_38253797的博客 563

二叉树的所有路径

返回所有从根节点到叶子节点的路径。版本二的代码拆开后等价于以下代码。给你一个二叉树的根节点。是指没有子节点的节点。

qq_58158950的博客 486

2025高频面试算法总结篇【二叉树】

高频面试算法—二叉树

高朗的博客 1779

跟着代码随想录练算法——二叉树(JS)(上)

145. 二叉树的后序遍历 94. 二叉树的中序遍历 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 199. 二叉树的右视图

pingting_的博客 1078

LeetCode Hot100 ---- 二叉树专题

104. 二叉树的最大深度 根节点为第一层,经典必会。 class Solution: def maxDepth(self, root: TreeNode) -> int: if not root: return 0 return 1 + max([self.maxDepth(root.left), self.maxDepth(root.right)]) 94. 二叉树的中序遍历 给定一个二叉树的根节点root,返回它

摩登都市天空---专栏 1225
上一篇: 【简单】929. 独特的电子邮件地址
下一篇: 【简单】1189. “气球” 的最大数量
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值