JavaScript算法题-二叉树

40 阅读1分钟

112. 路径总和

image.png

题解

www.bilibili.com/video/BV1xh…

/**
 * 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

image.png

题解

www.bilibili.com/video/BV1MV…

/**
 * 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);

问题记录(不知道为什么)

image.png

image.png