前端算法(68)

简介: 前端算法(68)

题目

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

题目解析

思路一

我们首先要在deep()左右节点调用时,如果都为空我们就要做出对应的处理,这里容易调用两次,调用两次的情况下就是会出现两次结果,所以我们这里判断了下p.left && p.right,如果父节点已经满足,且仅有左节点或者右接点,是为正确的。我们在判断下!p.left&&!p.right追加了flag 标识是否为叶子节点,还需要判断root是否为空,然后再进行处理,最后进行返回

/**
 * @param {TreeNode} root
 * @param {number} sum
 * @return {number[][]}
 */
var pathSum = function(root, sum) {
    let result = []
    function deep(p,arr,num,flag){
        if(!p &&num === sum && flag){
            result.push(arr)
            return
        }
        if(!p){
            return
        }
        if(!p.left && !p.right){
            deep(p.left,[...arr,p.val],num+p.val,true)
        }else{
            deep(p.left,[...arr,p.val],num+p.val,false)
            deep(p.right, [...arr,p.val],num+p.val,false)
        } 
    }
    if(root){
        deep(root,[],0)
    }
    return result
};


思路二

我们这里使用递归的方式进行实现,首先定义一个接收结果的数组,然后再定义一个递归函数,递归函数中对数组的左右节点进行判断,然后使用递归函数进行调用左节点和右节点,然后左节点调用的函数和右节点调用的函数都返回结果,最后使用arr.pop()去除该叶子节点

/**
 * @param {TreeNode} root
 * @param {number} sum
 * @return {number[][]}
 */
var pathSum = function(root, sum) {
    let res = [];
    help(root, sum, res, []);
    return res;
};
function help(root, sum, res, arr) {
    if (root === null) return;
    arr.push(root.val);
    if (root.left === null && root.right === null && root.val === sum) {
        res.push([...arr]);
    }
    help(root.left, sum-root.val, res, arr);
    help(root.right, sum-root.val, res, arr);
    arr.pop();
}


相关文章
|
1月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
8天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
3月前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
3月前
|
算法 前端开发
前端算法-平衡二叉树
前端算法-平衡二叉树
|
3月前
|
算法 前端开发
前端算法-将有序数组转换为二叉搜索树
前端算法-将有序数组转换为二叉搜索树
|
3月前
|
算法 前端开发
前端算法-对称二叉树
前端算法-对称二叉树
|
3月前
|
存储 算法 前端开发
前端算法- 二叉树的中序遍历
前端算法- 二叉树的中序遍历
|
3月前
|
存储 算法 前端开发
前端算法-合并两个有序数组
前端算法-合并两个有序数组
|
3月前
|
存储 算法 前端开发
|
3月前
|
算法 前端开发
前端算法-x 的平方根
前端算法-x 的平方根

热门文章

最新文章