剑指 Offer 34. 二叉树中和为某一值的路径

Posted on 2022-03-27 17:56  AcTourist  阅读(26)  评论(0)    收藏  举报

一、题目

 

 二、题目分析

  1.给了一个root 和 targetSum , 任务: 找出所有从根节点到叶节点(没有子节点的节点)路径总和等于给定目标和的路径

  2.解决方法: 遍历整个树,找到总和符合目标树的,放到一个数组里存着,然后输出该数组即可

  3.问题:在遍历的时候,把每个元素放到一起然后算出总和,怎么能保证在遍历新的节点的时候,不会改变已经遍历完的节点

    解决方法:我们可以利用到 slice() 方法进行解决:可以从已有的数组返回选定的元素、不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。

三、代码

/**
 * 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
 * @param {number} target
 * @return {number[][]}
 */
var pathSum = function(root, target) {
    let res = [];
    
    function dfs(root, sum, path) {
        if(!root) return;
        if (root.val === sum && !root.left && !root.right) {
        res.push(path);
      }
        path.push(root.val);
        dfs(root.left, sum - root.val, path.slice());
        dfs(root.right, sum - root.val, path.slice());
    }

    dfs(root, target, []);
    return res;
};