【LeetCode】112. 路径总和

简介: 【LeetCode】112. 路径总和

算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。


题目描述


难度:【简单】 标签:【二叉树】


给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,
判断该树中是否存在 根节点到叶子节点 的路径,
这条路径上所有节点值相加等于目标和 targetSum


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


题目地址:https://leetcode-cn.com/problems/path-sum/description/


示例


示例 1


1268169-20211130224140485-750328421.png


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


示例 2


1268169-20211130224210388-969317334.png


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


示例 3:


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


解题


这个问题在于这条路径上所有节点值相加等于目标和 targetSum,路径和可以定义为从跟节点到叶子节点的所有节点的和


现在这个和是已知的,我遍历过的节点也是已知的。


那么按照套路,考虑下当前节点需要做的事情:


当前节点跟这个目标值进行比较,如果相等就返回true,不等就继续往下遍历。


当前节点遍历过后,目标值要减去当前这个节点的值,作为新的目标值,给孩子节点使用。


剩下的继续交给递归来处理,不要跳入递归细节。


/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if (root == null) {
            return false;
        }
        if (root.left == null && root.right == null && root.val == targetSum) {
            return true;
        }
        // 当前节点的值与目标值不等,就继续往下递归遍历左右孩子
        // 因为遍历过的节点不等于目标值,那么就可以用目标值减去它,作为新的目标值,传给孩子节点比较
        boolean leftResult = hasPathSum(root.left, targetSum - root.val);
        boolean rightResult = hasPathSum(root.right, targetSum - root.val);
        // 最后只要左右孩子任一满足即可
        return leftResult || rightResult;
    }
}


从框架角度,仍然是一道前序遍历。

相关文章
|
2月前
|
算法 Unix 测试技术
力扣经典150题第五十二题:简化路径
力扣经典150题第五十二题:简化路径
26 0
|
1月前
|
机器人 Python
【Leetcode刷题Python】62. 不同路径
LeetCode 62题 "不同路径" 的Python解决方案,使用动态规划算法计算机器人从网格左上角到右下角的所有可能路径数量。
36 0
|
3月前
|
存储 SQL 算法
LeetCode题目113:多种算法实现 路径总和ll
LeetCode题目113:多种算法实现 路径总和ll
|
1月前
|
Python
【Leetcode刷题Python】113. 路径总和 II
LeetCode上113号问题"路径总和 II"的Python实现,通过深度优先搜索来找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
30 3
【Leetcode刷题Python】113. 路径总和 II
|
1月前
|
存储 Python
【Leetcode刷题Python】64. 最小路径和
一种使用动态规划解决LeetCode上64题“最小路径和”的Python实现方法,通过维护一个一维数组来计算从网格左上角到右下角的最小路径总和。
24 1
【Leetcode刷题Python】64. 最小路径和
|
22天前
|
存储 算法 Linux
LeetCode第71题简化路径
文章讲述了LeetCode第71题"简化路径"的解题方法,利用栈的数据结构特性来处理路径中的"."和"..",实现路径的简化。
LeetCode第71题简化路径
|
22天前
|
算法
LeetCode第64题最小路径和
LeetCode第64题"最小路径和"的解题方法,运用动态规划思想,通过构建一个dp数组来记录到达每个点的最小路径和,从而高效求解。
LeetCode第64题最小路径和
|
1月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
20 4
|
1月前
|
存储 Python
【Leetcode刷题Python】滑雪路径消耗时间:Testing Round #16 (Unrated) C. Skier
Leetcode题目"Testing Round #16 (Unrated) C. Skier"的Python解决方案,题目要求计算给定滑雪路径字符串的总耗时,其中未走过的边耗时5秒,走过的边耗时1秒。
32 4
|
1月前
|
存储 Python
【Leetcode刷题Python】1496.判断路径是否相交
Leetcode第1496题"判断路径是否相交"的Python代码实现,通过使用字典存储方向和集合记录访问过的坐标点来检测路径是否与自身相交。
33 2