「LeetCode」257-二叉树的所有路径⚡️

简介: 「LeetCode」257-二叉树的所有路径⚡️

image.png

前言🌧️



算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。


因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。


编写指令的好坏,会直接影响到程序的性能优劣,而指令又由数据结构和算法组成,所以数据结构和算法的设计基本上决定了最终程序的好坏


题目🦀


257. 二叉树的所有路径


难度简单


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

叶子节点 是指没有子节点的节点。


示例 1:


image.png



输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:


输入:root = [1]
输出:["1"]

提示:


  • 树中节点的数目在范围 [1, 100]
  • -100 <= Node.val <= 100


解题思路🌵


  • 此题采用层序遍历即可
  • 每次遍历的时候带上当前的路径,如果用字符串来表示path就不需要考虑对象引用问题,如果是数组则需要每次contact来传递新的引用
  • 建议还是使用字符串来记录path,这样空间复杂度为O(1)


解题步骤🐂



  • 初始化result数组
  • 初始化dfs函数
  • 处理边界条件,如果root为null则返回null
  • 如果到了叶子结点(当前结点的左右结点为null),则添加到result数组中
  • 不过不是叶子结点,则追加path继续深度遍历


源码🔥


/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {string[]}
 */
var binaryTreePaths = function(root) {
    const result = []
    const dfs = (root,path)=>{
        if(!root){
            return 
        }
        if(!root.left && !root.right){
            result.push(path+root.val)
            return
        }
        dfs(root.left,path+root.val+'->')
        dfs(root.right,path+root.val+'->')
    }
    dfs(root,'')
    return result
};

时间复杂度:O(n)


空间复杂度:O(1)


结束语🌞


image.png

那么鱼鱼的LeetCode算法篇的「LeetCode」257-二叉树的所有路径⚡️就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步

相关文章
|
1月前
【LeetCode 35】112.路径总和
【LeetCode 35】112.路径总和
23 0
|
1月前
【LeetCode 36】113.路径总和II
【LeetCode 36】113.路径总和II
27 0
|
1月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
19 2
|
1月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
15 2
|
1月前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
14 2
|
1月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
17 0
|
1月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
13 0
|
1月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
14 0
|
1月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
11 0
|
1月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
16 0