Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】

这篇具有很好参考价值的文章主要介绍了Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

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

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

示例 1:

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

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

示例 2:

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

输入:root = [1,2], targetSum = 0
输出:[]

提示:

  • 树中节点总数在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

解题思路

1.题目要求我们找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。我们可以使用深度优先遍历来解决这个问题。

2.举个例子:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

首先我们建立两个动态数组res和temp来存储结果和遍历的路径。

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构 然后我们从根节点开始遍历,先将 5 放入数组 temp ,并且给 target 减 5 。

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

此时 target 不为 0 ,那么我们需要继续遍历,再将 5 的左孩子 4 放入temp 中,并且给 target 减 4。

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构 此时 target 不为 0 ,那么我们需要继续遍历,再将 4 的左孩子 11 放入temp 中,并且给 target 减 11。

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

  此时 target 不为 0 ,那么我们需要继续遍历,再将 11 的左孩子 7 放入temp 中,并且给 target 减 11。

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

这时我们发现 7 已经是叶子节点,但是target还是不为 0 ,那就说明这条路不是路径总和等于给定目标和的路径,我们就需要回溯,我们返回上一个节点,也就是11。

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

然后我们去遍历 11 的右孩子 2 , 将 11 的右孩子 2 放入temp 中,并且给 target 减 2。

 Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

此时 target 刚好为 0 ,并且 2 也是叶子节点,那就说明我们找到了路径总和等于给定目标和的路径,我们需要将 temp 中保存的路径放入数组 res 中,

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

然后再进行回溯按照相同的思路去遍历其他的节点,直到所有节点都遍历结束,最后返回 res即可。

代码实现

class Solution {
    List<List<Integer>> res;
    List<Integer> temp;
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        res = new ArrayList<>();
        temp = new ArrayList<>();
        dsf(root,target);
        return res;
    }
    void dsf(TreeNode root, int target){
        if(root == null){
            return;
        }
        temp.add(root.val);
        target = target - root.val;
        if(root.left == null && root.right == null && target == 0){
            res.add(new ArrayList(temp));
        }
        dsf(root.left, target);
        dsf(root.right, target);
        temp.remove(temp.size()-1);
}
}

测试结果

Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】,leetcode,算法,职场和发展,java,数据结构

 文章来源地址https://www.toymoban.com/news/detail-667439.html

到了这里,关于Leetcode-每日一题【剑指 Offer 34. 二叉树中和为某一值的路径】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (树) 剑指 Offer 27. 二叉树的镜像 ——【Leetcode每日一题】

    难度:简单 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 镜像输出: 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 限制 : 0 = 节点个数 = 1000 注意 :本题与 226. 翻转二叉树 相同。 💡思路:递归 我们从根节点开始,递归地对树进行遍历: 如果

    2024年02月13日
    浏览(34)
  • Leetcode-每日一题【剑指 Offer 32 - I. 从上到下打印二叉树】

    从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树:  [3,9,20,null,null,15,7] ,     3    /   9  20     /     15   7 返回: [3,9,20,15,7] 提示: 节点总数 = 1000 1.题目要求我们从上到下打印出二叉树的每个节点,同一层的节点按照从左

    2024年02月12日
    浏览(49)
  • (树) 剑指 Offer 32 - I. 从上到下打印二叉树 ——【Leetcode每日一题】

    难度:中等 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回: 提示 : 节点总数 = 100 💡思路:BFS 使用 优先队列 进行 层序遍历 即可! 🍁代码:(C++、Java) C++ Java 🚀 运行结果: 🕔 复杂度分析: 时间

    2024年02月14日
    浏览(41)
  • Leetcode-每日一题【剑指 Offer 32 - III. 从上到下打印二叉树 III】

    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 例如: 给定二叉树:  [3,9,20,null,null,15,7] ,     3    /   9  20     /     15   7 返回其层次遍历结果:

    2024年02月12日
    浏览(41)
  • Leetcode-每日一题【剑指 Offer 32 - II. 从上到下打印二叉树 II】

    从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树:  [3,9,20,null,null,15,7] ,     3    /   9  20     /     15   7 返回其层次遍历结果: [   [3],   [9,20],   [15,7] ] 提示: 节点总数 = 1000 1.题目要求我们从上到下按层打印二

    2024年02月12日
    浏览(45)
  • 二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”

    各位CSDN的uu们你们好呀,今天继续数据结构与算法专栏中的二叉树,下面,让我们进入二叉树的世界吧!!! 二叉树(上)——“数据结构与算法”_认真学习的小雅兰.的博客-CSDN博客 二叉树链式结构的实现 二叉树链式结构的实现 求二叉树的高度 但是这种写法有很大的问题

    2024年02月17日
    浏览(41)
  • 剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径

    //写的有点问题,暂时想不到怎么改,先放着,通过用例71/83 卡住的是abcd 但是改了又有问题 无语 看了 答案 都写不对 在类成员里面定义了row和col 就不要重复定义了 不然不知道为什么就开始发疯 先贴出蠢货写出来的东西 审题也审不明白 机器人只能上下左右走 不能一行一行

    2024年02月15日
    浏览(38)
  • Leetcode-每日一题【剑指 Offer 29. 顺时针打印矩阵】

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入: matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出: [1,2,3,4,8,12,11,10,9,5,6,7] 限制: 0 = matrix.length = 100 0 = matrix[i].length = 100 1.题目要求

    2024年02月13日
    浏览(57)
  • (链表) 剑指 Offer 24. 反转链表 ——【Leetcode每日一题】

    难度:简单 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入 : 1-2-3-4-5-NULL 输出 : 5-4-3-2-1-NULL 限制 : 0 = 节点个数 = 5000 注意:本题与 206. 反转链表 相同。 💡思路: 法一:递归 可以将本问题分解成子问题: 1 - (剩余部分的反转)

    2024年02月15日
    浏览(49)
  • Leetcode-每日一题【剑指 Offer 16. 数值的整数次方】

    实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。 示例 1: 输入: x = 2.00000, n = 10 输出: 1024.00000 示例 2: 输入: x = 2.10000, n = 3 输出: 9.26100 示例 3: 输入: x = 2.00000, n = -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 提示: -10

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包