257. 二叉树的所有路径

深度优先遍历 DFS

解题思路

  1. 在深度优先搜索遍历二叉树时,需要考虑当前的节点以及它的孩子节点:

    • 如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点;
    • 如果当前节点是叶子节点,则在当前路径末尾添加该节点后就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可;
  2. 如此,当遍历完整棵二叉树以后就得到了所有从根节点到叶子节点的路径;

复杂度

  1. 时间复杂度:O(N),其中 N 表示节点数目;

  2. 空间复杂度:O(N^2),其中 N 表示节点数目;

    • 在最坏情况下,当二叉树中每个节点只有一个孩子节点时,即整棵二叉树呈一个链状,此时递归的层数为 N ,此时每一层的 path 变量的空间代价的总和为 O(N^2);
    • 最好情况下,当二叉树为平衡二叉树时,它的高度为 logN ,此时空间复杂度为 O((logN)^2);

代码实现

var binaryTreePaths = function (root) {
    let res = [];
    travese(root, res, []);
    return res;
};

const travese = (node, res, path = []) => {
    if (node === null) return null;

    // 叶子节点
    if (node.left === null && node.right === null) {
        path.push(node.val);
        res.push(path.join('->'));
    }

    travese(node.left, res, path.concat(node.val));
    travese(node.right, res, path.concat(node.val));
}
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 深度优先遍历 DFS
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现