112. 路径总和
题解
/**
* 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} targetSum
* @return {boolean}
*/
var hasPathSum = function(root, targetSum) {
//dfs
//叶子 中间 叶下
if(!root) return false;
if(!root.left && !root.right) { //叶子节点
return root.val === targetSum
}
return hasPathSum(root.left,targetSum - root.val) || hasPathSum(root.right,targetSum - root.val) //只是通过传参的方式,targetSum值未发生改变,不需要回溯
};
113. 路径总和 II
题解
/**
* 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} targetSum
* @return {number[][]}
*/
var pathSum = function(root, targetSum) {
let ans = []
let rol = []
function dfs(root,target){
if(!root) return;
target = target - root.val; //去掉根节点需要的数
rol.push(root.val) //记录下来
if(!root.left && !root.right && target==0){ //来到叶节点,并且满足题目条件了
ans.push([...rol])
}
dfs(root.left,target)
dfs(root.right,target)
rol.pop() //不满足及时清除
}
dfs(root,targetSum)
return ans
};
拓展运算符...
let ans = []
let arr = [-1,0,3,5,9,12]
// ans.push(arr) //[ [ -1, 0, 3, 5, 9, 12 ] ]
ans.push([...arr]) //[ [ -1, 0, 3, 5, 9, 12 ] ]
console.log(ans);