前言🌧️
算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。
因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。
编写指令的好坏,会直接影响到程序的性能优劣,而指令又由数据结构和算法组成,所以数据结构和算法的设计基本上决定了最终程序的好坏。
题目🦀
257. 二叉树的所有路径
难度简单
给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入: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)
结束语🌞
那么鱼鱼的LeetCode算法篇的「LeetCode」257-二叉树的所有路径⚡️
就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾
,欢迎加我好友
,一起沙雕
,一起进步
。