Skip to content

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
};

上次更新于: