首页 > 其他分享 >力扣---剑指 Offer 34. 二叉树中和为某一值的路径

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

时间:2023-04-02 20:11:20浏览次数:39  
标签:Offer res sum list --- 二叉树 null root 节点

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

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

 

示例 1:

 

 

输入: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:

 

 

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

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

提示:

树中节点总数在范围 [0, 5000] 内
-1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
注意:本题与主站 113 题相同:https://leetcode-cn.com/problems/path-sum-ii/

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

深度优先搜索,大致思路是用一个 list 来存储路径信息,用一个 sum 来存储路径值的和。遇到 target 和 sum 相等的情况时,判断该节点是不是叶节点(左节点和右节点都为 null)。

剩下的看注释:

class Solution {
    public List<List<Integer>> pathSum (TreeNode root, int target) {
        List<List<Integer>> res = new ArrayList<>();
        if (root == null) {
            return res;
        }
        // 深度优先搜索。
        dfs(root, target, res, new ArrayList<Integer>(), 0);
        return res;
    }
    // root:当前节点。  target:需要等于的值。  res:最后返回的答案。  list:从根结点到当前节点的路径。  sum:从根结点到当前节点的路径值的和。
    private void dfs (TreeNode root, int target, List<List<Integer>> res, List<Integer> list, int sum) {
        // 当前节点为 null 时直接返回。
        if (root == null) {
            return;
        }
        // 更新路径和节点和。
        list.add(root.val);
        sum += root.val;
        // 由于包含负数,所以只能用 == 来判断。
        if (sum == target) {
            // 需要子节点全为null。
            // 由于存在之后子节点的值和为 0 的情况,所以不能直接返回,还需要对子节点进行判断。
            if (root.left == null && root.right == null) {
                // 因为 ArrayList 是引用数据,所以不能直接添加,而应该加入复制。
                res.add(new ArrayList<Integer>(list));
                // 还原操作。
                list.remove(list.size() - 1);
                return;
            }
        }
        // 左节点
        dfs(root.left, target, res, list, sum);
        // 右节点
        dfs(root.right, target, res, list, sum);
        // 还原操作。
        list.remove(list.size() - 1);
    }
}

 

标签:Offer,res,sum,list,---,二叉树,null,root,节点
From: https://www.cnblogs.com/allWu/p/17281164.html

相关文章

  • odoo 开发入门教程系列-准备一些操作(Action)?
    准备一些操作(Action)?到目前为止,我们主要通过声明字段和视图来构建模块。在任何真实的业务场景中,我们都希望将一些业务逻辑链接到操作按钮。在我们的房地产示例中,我们希望能够:取消或将房产设置为已售出接受或拒绝报价有人可能会说,我们已经可以通过手动更改状态来完成这些事......
  • 实验一-密码引擎-3-加密API研究
    任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客......
  • 102.二叉树的层序遍历
    给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)classTreeNode{public:intval;TreeNode*left;TreeNode*right;TreeNode():val(NULL),left(nullptr),right(nullptr){}TreeNode(intx):val(x),left(nullptr),rig......
  • 牛客SQL-非技术快速入门
    01基础查询SQL1查询所有列select*fromuser_profileSQL2查询多列selectdevice_id,gender,age,universityfromuser_profileSQL3查询结果去重selectdistinct(university)fromuser_profileSQL4查询结果限制返回行数top不适用于所有的数据库语言。SQLSERVER......
  • 【Python】Flask-SQLAlchemy PyCharm无法自动补全解决方案
    ✨Flask-Sqlalchemy无法自动补全解决方案PyCharm版本:PyCharm2021.3.3(ProfessionalEdition)flask版本:2.2.3flask-sqlalchemy版本:3.0.3SQLAlchemy版本:2.0.4在使用flask-sqlalchemy中db.Column,primary_key等无法自动补全降低flask-sqlalchemy版本即可解决pipinstallf......
  • 力扣---面试题13. 机器人的运动范围
    地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1]。一个机器人从坐标[0,0]的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格[35,37],因为3+5+3+7=18。但它不能进入......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)- Make It Permutation
    题目链接:Problem-C-Codeforces  #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;#defineendl"\n"intmain(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);intT=1;cin>>T;while(......
  • 利民(Thermalright)HR-10 2280 固态硬盘SSD散热器 - 我的硬件配置
    ......
  • java -- static, 内部类, 权限, 参数传递
    static关键字static是静态修饰符,一般修饰成员。被static修饰的成员属于类,不属于单个这个类的某个对象。static修饰的成员被多个对象共享。static修饰的成员属于类,但是会影响每一个对象。被static修饰的成员又叫类成员,不叫对象的成员。static特点被static修饰的成员变量属于类,不......
  • 阅读-《这才是心理学》
    第一章1.什么是心理学?心理学是用来预测和分析、控制人的行为。能够更好的理解、预测别人的行为背后的原因,旨在将人的固有观念放置于科学检验之下2.心理学的用处心理学不光是学习其理论知识,更是挖掘其背后的本质学习其批判性的思维,帮助我们用于分辨各种知识主张现代心......