257 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
题解
我们可以利用先序遍历来处理这题,因为要先处理根节点然后再递归。
递归三部曲:
1.定义参数和返回值 参数: root,当前处理的节点,path:当前的path,results:最终所有的结果 返回值:无返回值
2.定义递归终止条件 当root为null/undefinded,直接返回(不记录结果,因为当前节点是空的) 当root为叶子节点(left,right都为空),记录当前path 到 results
3.单层逻辑
递归遍历左右子树,里面有个隐性的回溯
javascript
binaryTreePathInner(root.left, path + root.val + '->', allResults)
binaryTreePathInner(root.right, path + root.val + '->', allResults)
整体代码
javascript
var binaryTreePaths = function(root) {
const binaryTreePathInner = function(root, path, allResults) {
// 如果不判断root 为空,则下面遍历的时候要判断是否有左右子树
if(!root) {
return
}
if(!root.left && !root.right) {
//遍历到叶子节点就结束递归
allResults.push(path + root.val)
return
}
binaryTreePathInner(root.left, path + root.val + '->', allResults)
binaryTreePathInner(root.right, path + root.val + '->', allResults)
}
const allResults = []
binaryTreePathInner(root, '', allResults)
return allResults
};