题目名称:二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
解法
- 本地解题思路为回溯法,回溯法最难的部分在于引用值的传递,需要在每次达到条件后清空
- 但是使用字符串基本类型值,不存在引用类型地址传递,会简化回溯操作流程
一、字符串回溯法
/**
* @param {TreeNode} root
* @return {string[]}
*/
var binaryTreePaths = function (root) {
const res = []
dep(root, '')
return res
function dep(node, path) {
if (!node) return
path += node.val + '->'
if (!node.left && !node.right) {
res.push(path.slice(0, path.length - 2))
return
}
dep(node.left, path)
dep(node.right, path)
}
};
二、数组回溯法
/**
* @param {TreeNode} root
* @return {string[]}
*/
var binaryTreePaths1 = function (root) {
const res = []
const path = []
dep(root)
return res
function dep(node) {
if (!node) return
if (!node.left && !node.right) {
path.push(node.val)
res.push(path.join('->'))
path.pop()
return
}
path.push(node.val)
dep(node.left)
dep(node.right)
path.pop()
}
};
总结
- 采用基本类型值在回溯中可以有效简化操作
说明
- 本题解已同步leetcode-js-simple/14.[ 257 ] 二叉树的所有路径,可以复制代码进行调试。
- 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情