前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcode No.257 二叉树的所有路径

Leetcode No.257 二叉树的所有路径

作者头像
week
发布于 2021-05-06 08:04:53
发布于 2021-05-06 08:04:53
1.3K03
代码可运行
举报
文章被收录于专栏:用户画像用户画像
运行总次数:3
代码可运行

一、题目描述

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

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

示例:

输入:

1 / \ 2 3 \ 5

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

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

二、解题思路

最直观的方法是使用深度优先搜索。在深度优先搜索遍历二叉树时,我们需要考虑当前的节点以及它的孩子节点。

如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。 如果当前节点是叶子节点,则在当前路径末尾添加该节点后我们就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可。 如此,当遍历完整棵二叉树以后我们就得到了所有从根节点到叶子节点的路径。

三、代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> paths;
        travel(root,"",paths);
        return paths;
    }
    void travel(TreeNode* root,string path,vector<string> &paths){
        if(root==nullptr){
            return;
        }
        if(root->left==nullptr && root->right==nullptr){
            path=path+to_string(root->val);
            paths.push_back(path);
            return;
        }
        path=path+to_string(root->val)+"->";
        travel(root->left,path,paths);
        travel(root->right,path,paths);
    }
};

四、复杂度分析

时间复杂度:O(N^2),其中 N 表示节点数目。在深度优先搜索中每个节点会被访问一次且只会被访问一次,每一次会对 path 变量进行拷贝构造,时间代价为 O(N),故时间复杂度为 O(N^2)

空间复杂度:O(N^2),其中 N表示节点数目。除答案数组外我们需要考虑递归调用的栈空间。在最坏情况下,当二叉树中每个节点只有一个孩子节点时,即整棵二叉树呈一个链状,此时递归的层数为 N,此时每一层的 path 变量的空间代价的总和为 O(

) = O(N^2),空间复杂度为 O(N^2)。最好情况下,当二叉树为平衡二叉树时,它的高度为logN,此时空间复杂度为 O((logN)^2)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
呆呆敲代码的小Y
2021/10/29
2620
【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径
Leetcode No.112 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
week
2021/05/06
3040
【小Y学算法】⚡️每日LeetCode打卡⚡️——28.二叉树的最大深度
具体而言,在计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后在 O(1) 时间内计算出当前二叉树的最大深度。递归在访问到空节点时退出。
呆呆敲代码的小Y
2021/09/10
2580
【小Y学算法】⚡️每日LeetCode打卡⚡️——28.二叉树的最大深度
二叉树——257. 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
向着百万年薪努力的小赵
2022/12/02
3620
二叉树——257. 二叉树的所有路径
二叉树的所有路径(C++)
给你一个二叉树的根节点 root,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
GeekLiHua
2025/01/21
800
二叉树的所有路径(C++)
Leetcode No.104 二叉树的最大深度
如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为 max(l,r)+1
week
2021/05/06
2650
深度优先的艺术:探索二叉树的深搜算法精髓
二叉树作为一种重要的数据结构,在算法领域有着广泛的应用,而深度优先搜索(DFS)是二叉树遍历和操作的核心算法之一。通过 DFS,可以以递归或迭代的方式深入探索树的每一个节点,并高效地解决路径查找、节点计数、最大深度等问题。在这篇文章中,我们将深入剖析二叉树的深搜算法,从基础概念到典型应用,再到代码实现,带你全面掌握这一重要的算法工具。
suye
2024/12/20
3060
深度优先的艺术:探索二叉树的深搜算法精髓
LeetCode 257. 二叉树的所有路径(DFS)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-paths 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Michael阿明
2021/02/20
2340
LeetCode 257. 二叉树的所有路径(DFS)
Leetcode No.111 二叉树的最小深度
示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:2
week
2021/05/06
3090
【算法专题】二叉树中的深搜(DFS)
深度优先遍历(DFS,全称为 Depth First Traversal),是我们树或者图这样的数据结构中常用的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分支,直到一条路径上的所有节点都被遍历完毕,然后再回溯到上一层,继续找⼀条路遍历。
YoungMLet
2024/03/01
3000
Leetcode No.113 路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
week
2021/11/29
1840
Leetcode No.113 路径总和 II
二叉树的所有路径
深度优先遍历二叉树,将路径节点拼接字符串,遍历到根节点之后将拼接的字符串推入目标数组,首先如果没有节点则直接返回一个空数组,之后定义目标数组target,如果没有定义节点则返回空,如果没有左孩子以及右孩子即叶子节点,则将缓存字符串推入数组并返回结束递归,如果存在左孩子,则向左递归并将左孩子的节点值拼接到字符串并传递,如果存在右孩子,则向右递归并将右孩子节点的值拼接到字符串并传递,之后启动递归,注意题目要求是字符串而不是数字,所以需要将启动时的节点值转为字符串,最后返回目标数组即可。
WindRunnerMax
2020/09/07
3970
【小Y学算法】⚡️每日LeetCode打卡⚡️——31. 二叉树的最小深度
????前言 ????原题样例:二叉树的最小深度 ????C#方法:深度优先搜索 ????Java 方法一:深度优先搜索 ????Java 方法二:广度优先搜索 ????总结 ????往期优质文章分享
呆呆敲代码的小Y
2021/09/23
2780
【小Y学算法】⚡️每日LeetCode打卡⚡️——31. 二叉树的最小深度
Leetcode No.129 求根节点到叶节点数字之和
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字:
week
2021/11/29
2220
Leetcode No.129 求根节点到叶节点数字之和
【leetcode刷题】T133-二叉树的所有路径
https://leetcode-cn.com/problems/binary-tree-paths/
木又AI帮
2019/08/06
4680
二叉树——111. 二叉树的最小深度
输入:root = [2,null,3,null,4,null,5,null,6] 输出:5
向着百万年薪努力的小赵
2022/12/02
3080
二叉树——111. 二叉树的最小深度
【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
用户11286421
2024/11/21
4410
【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
二叉树的所有路径
题意 给一棵二叉树,找出从根节点到叶子节点的所有路径。 样例 给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5", "1->3" ] 思路 如某一个节点,没有子节点则将本身的值加入到集合中,如果有子节点,则将在子节点的路径之前加上当前节点。 代码实现 /** * Definition of TreeNode: * public class TreeNode { * public int val; * pu
一份执着✘
2018/06/04
6470
二叉树的最大深度(LeetCode 104)
如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为 max(l, r) + 1。
恋喵大鲤鱼
2023/12/18
1980
二叉树的最大深度(LeetCode 104)
LeetCode-111. 二叉树的最小深度(java)
       题目给定:最小深度是从根节点到最近叶子节点的​​最短路径​​上的节点数量。解题思路还是递归,万金油解题思路!凡是遇到二叉树题,递归也是我最能想到的,哈哈哈,但是还是存在很大的优化空间的,比如深度优先搜索或者广度优先搜索。具体思路及解题步骤请看如下:
bug菌
2023/05/27
1620
LeetCode-111. 二叉树的最小深度(java)
相关推荐
【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验