LeetCode详解 之 Path Sum I and II(Java)

2024-09-03 03:32
文章标签 java leetcode 详解 ii path sum

本文主要是介绍LeetCode详解 之 Path Sum I and II(Java),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目
Path Sum I:
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and  sum = 22 ,
Path Sum II:

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and  sum = 22 ,
              5/ \4   8/   / \11  13  4/  \    / \7    2  5   1
需要返回的是:
 
[[5,4,11,2],[5,8,4,5]
]
也就是说第一题要求我们在一个二叉树上面,看是否有一条路径上所有的节点的值加起来等于我们所需要的这个固定的值。第二题难度加大了,在第一题的基础上面,要求找出所有的路径并且把这些路径用一个List表示出来。本题考察的依然是对树进行操作,以及对于双重List的用法,这对于刚刚接触数据结构和java的人来说还是略有难度。那么下面我们就一一来对这两道题目的程序进行详细的讲解。


程序及讲解:
那么第一题我给出了一种非常简单的方法,几行代码就可以把题目要求搞定,这样省去了大量的时间去进行下一环节的面试。
Path Sum I:
public class Solution {
    public boolean hasPathSum(TreeNode root, int sum) {
          if(root==null) return false;
          else if(root.left==null && root.right==null)
          return root.val==sum;
          else 
          sum=sum-root.val;
          return hasPathSum(root.left,sum)||hasPathSum(root.right,sum);
    }
}
在这里,我们直接进行了迭代(个人爱好),把程序交给下一步进行自动完成,只需要少量的代码来控制边界条件,此题过于简单就不做详细的解释了

Path Sum II:
public class Solution {
public ArrayList> pathSum(TreeNode root, int sum) {
          ArrayList> result = new ArrayList>();
          if (root == null)
                return result;
          recursivePathSum(root, sum, new ArrayList(), result);
          return result;
    }
private void recursivePathSum(TreeNode root, int sum, ArrayList current,ArrayList> result) 
    {
          if (root == null)         
return;
          if (root.val == sum && root.left == null && root.right == null) {
                current.add(root.val);
                result.add(new ArrayList(current));
                current.remove(current.size()-1);
                return;
       }
          current.add(root.val);
          recursivePathSum(root.left, sum-root.val, current, result);
          recursivePathSum(root.right, sum-root.val, current, result);
          current.remove(current.size()-1);
    }
}

在这里,首先我们看到函数返回的是一个二维arraylist,这个是非常好用的一个java独有的一个东西,继承自List具有List的大量属性外,还具有add,remove等功能,可查阅API
首先check root,如果是null就返回刚刚建好的空的ArrayList,那么这个新建的方法中,没有返回任何值,但是却对result进行了一系列的操作,最终返回result。
那么重点就在这个我们新建的方法,如何才能很有效的实现这个方法:
如果只有一个根节点有值切恰恰等于那个值,OK,直接装上走人,如果没有,不着急,再进行遍历,我把根节点值保存在current这个arraylist中,再一次遍历左边的节点和右边的节点,直到程序结束。
细节在于每次current完了以后要对他的size进行一次remove
arraylist.remove(index)的方法是remove掉index这个点的值。

这篇关于LeetCode详解 之 Path Sum I and II(Java)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131898

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为