首页 > 其他分享 >力扣112 路径的总和II

力扣112 路径的总和II

时间:2023-01-02 23:44:57浏览次数:42  
标签:II false 路径 public 力扣 isSum 112 null 节点

力扣112 路径的总和II

题目:

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

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

示例 1:

img

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。

示例 2:

img

输入:root = [1,2,3], targetSum = 5
输出:false
解释:树中存在两条根节点到叶子节点的路径:
(1 --> 2): 和为 3
(1 --> 3): 和为 4
不存在 sum = 5 的根节点到叶子节点的路径。

示例 3:

输入:root = [], targetSum = 0
输出:false
解释:由于树是空的,所以不存在根节点到叶子节点的路径。

解题思路:

核心思想就是我们一条路径一条路径每个节点加看现在节点与此路径之前节点和相加是否等于给定地具体的值。采用递归的形式从根节点开始一直到叶子节点结束这才算是一条路径。具体实现代码如下:

代码:

/**
 * 路径的总和:在一棵二叉树中寻找是否存在一条路径,这条路径的上节点值的综合为给定的具体某一个值
 * 如果存在则返回true如果不存在则返回false
 */
public class HasPathSum {
    //1.首先定义一颗二叉树节点类型的类
    public static class TreeNode{
        public int value;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int value) {
            this.value = value;
        }
    }

    //2.定义一个全局变量isSum是否存在这样的路径
    public static boolean isSum = false;

    //3.定义一个函数用来处理它是否是存在这样的路径
    public static void process(TreeNode x,int preSum,int sum){
        //3.1如果x是叶子节点那么就将x节点的值加上前面路径节点值的和preSum看是否等于sum,如果等于就改变全局变量isSum的值
        if(x.left == null && x.right == null){
            if(x.value + preSum == sum){
                isSum = true;
            }
            return;
        }
        //3.2如果x是非叶子节点那么首先我们应该先用preSum加上x节点的值再往下进行递归process
        preSum+=x.value;
        if(x.left != null){
            process(x.left,preSum,sum);
        }
        if (x.right != null) {
            process(x.right, preSum, sum);
        }
    }

    //4.根据3判定是否存在一条路径上的和等于给定的具体值
    public static boolean hasPathSum(TreeNode root,int sum){
        //4.1如果根节点为空那么不存在这样的路径返回false
        if (root == null){
            return false;
        }
        //4.2因为isSum是全局变量我们首先将isSum的值设为false
        isSum = false;
        //4.3从根节点开始调用process函数 根节点开始之前的路径的和preSum为0
        process(root,0,sum);
        /*
        如果从根节点开始调用process()如果存在满足条件的路径那么就会改变isSum的值为true如果不存在就不会改变isSum的值
         */
        //4.4最后我们返回isSum
        return isSum;
    }
}

标签:II,false,路径,public,力扣,isSum,112,null,节点
From: https://www.cnblogs.com/ygstudy/p/17020079.html

相关文章

  • yii的一些数据库查询方式(一)
    本篇文章会详细介绍and、or、between、in、like在where方法中的使用方法和举例。and​​//我们要查询id大于1并且小于3的数据​​​​$userInfo​​......
  • 力扣1
    485 最大连续1的个数给定一个二进制数组 nums ,计算其中最大连续 1 的个数。 示例1:输入:nums=[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三......
  • 力扣110 判断是否是平衡二叉树
    力扣110判断是否是平衡二叉树题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对......
  • 力扣107 二叉树的层序遍历
    力扣107二叉树的层序遍历题目:给你二叉树的根节点root,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例1:输入:root......
  • 力扣239 滑动窗口最大值
    题目:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回......
  • 力扣105 根据先序遍历以及中序遍历构建二叉树
    力扣105根据先序遍历以及中序遍历构建二叉树题目:给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树......
  • 刷刷刷Day2| 142.环形链表II
    142.环形链表IILeetCode题目要求给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪......
  • 力扣104 求二叉树的最大深度
    力扣104求二叉树的最大深度题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示......
  • 力扣101 对称树
    力扣101对称树题目:给你一个二叉树的根节点root,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:f......
  • 力扣150 逆波兰表达式求值
    题目:给你一个字符串数组tokens,表示一个根据 逆波兰表示法表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为'+'、'-'、'*......