这是悦乐书的第169次更新,第171篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第28题(顺位题号是112)。给定二叉树和整数sum,确定树是否具有根到叶路径,使得沿路径的所有值相加等于给定的sum。叶子节点是没有子节点的节点。例如:

给定以下二叉树和sum = 22,

            5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1

返回true,因为存在根到叶的路径5-> 4-> 11-> 2,并且和为22。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况一:当二叉树为空时,直接返回false。

特殊情况二:当二叉树只有一个节点时,即此节点为根节点,并且节点值等于sum,返回true。

正常情况:对于此题,遍历二叉树的节点时,需要使用深度优先的算法,我们可以借助递归,并且上面两种特殊情况也是递归的终止条件。对于从根节点进来的左右子树,可以同时进行递归,每次对相应的节点做减法,直到满足上面的特殊情况二为止。

public boolean hasPathSum(TreeNode root, int sum) {
if(root == null ){
return false;
}
if (root.left == null && root.right == null && (sum - root.val) == 0) {
return true;
}
return hasPathSum(root.left, sum-root.left.val) || hasPathSum(root.right, sum-root.right.val);
}

03 第二种解法

除了上面的递归,我们是否可以用迭代的方法呢?答案是可以的。

因为还是需要满足深度优先,所以我们单独使用了一个队列来放每条路径上的各节点之和,在每次取出一个节点的时候,同时取出一个和来,判断此节点是否为叶子节点并且判断和是否等于sum。

public boolean hasPathSum2(TreeNode root, int sum) {
if(root == null ){
return false;
}
Queue<TreeNode> queue = new LinkedList<>();
Queue<Integer> sums = new LinkedList<>();
queue.offer(root);
sums.offer(root.val);
while(!queue.isEmpty()) {
TreeNode t = queue.poll();
int temSum = sums.poll();
if (t.left == null && t.right == null && temSum == sum) {
return true;
}
if (t.left != null) {
queue.offer(t.left);
sums.offer(temSum + t.left.val);
}
if (t.right != null) {
queue.offer(t.right);
sums.offer(temSum + t.right.val);
}
}
return false;
}

04 小结

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Path Sum(Java实现)的更多相关文章

  1. LeetCode算法题-Path Sum III(Java实现)

    这是悦乐书的第227次更新 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第94题(顺位题号是437).您将获得一个二叉树,其中每个节点都包含一个整数值.找到与给定值相加的路径数 ...

  2. LeetCode算法题-Two Sum IV - Input is a BST(Java实现)

    这是悦乐书的第280次更新,第296篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第148题(顺位题号是653).给定二进制搜索树和目标数,如果BST中存在两个元素,使得 ...

  3. LeetCode算法题-Range Sum Query Immutable(Java实现)

    这是悦乐书的第204次更新,第214篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第70题(顺位题号是303).给定整数数组nums,找到索引i和j(i≤j)之间的元素之 ...

  4. LeetCode算法题-Two Sum II - Input array is sorted

    这是悦乐书的第179次更新,第181篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第38题(顺位题号是167).给定已按升序排序的整数数组,找到两个数字,使它们相加到特定 ...

  5. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  6. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  7. 【算法】LeetCode算法题-Two Sum

    程序 = 数据结构 + 算法. 算法是每一位程序员学习成长之路上无法避开的重要一环,并且越早接触越好.今后会每天做些算法题,至少每天做一道题目,同时会记录自己的解题思路和代码,通过[算法]专题来分享. ...

  8. LeetCode算法题-Sum of Left Leaves(Java实现)

    这是悦乐书的第217次更新,第230篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第85题(顺位题号是404).找到给定二叉树中所有左叶的总和.例如: 二叉树中有两个左叶 ...

  9. LeetCode算法题-Sum of Two Integers(Java实现)

    这是悦乐书的第210次更新,第222篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第78题(顺位题号是371).计算两个整数a和b的总和,但不允许使用运算符+和 - .例 ...

随机推荐

  1. Hive环境搭建及测试

     前提条件:已经安装好如下软件 Eclipse4.5 hadoop-2.7.3 jdk1.7.0_79 此篇文章基于上一篇文章:zookeeper高可用集群搭建 什么是Hive? 1.Hive是一个基 ...

  2. NLP入门(三)词形还原(Lemmatization)

      词形还原(Lemmatization)是文本预处理中的重要部分,与词干提取(stemming)很相似.   简单说来,词形还原就是去掉单词的词缀,提取单词的主干部分,通常提取后的单词会是字典中的单 ...

  3. [转]angular 禁止缓存

    本文转自:https://www.cnblogs.com/jonney-wang/p/9797906.html angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦. 在开 ...

  4. [转]简单科普私钥、地址、助记词、Keystore的区别

    本文转自:https://www.jianshu.com/p/d0a4a44685d3 很多人保管不好自己的虚拟财产,发生丢币的情况,很多都是因为不清楚私钥的概念. 私钥(Private Key) 比 ...

  5. [日常] nginx与负载均衡策略

    upstream mail.sina.net { #upstream的负载均衡,weight是权重,可以根据机器配置定义权重.weigth参数表示权值,权值越高被分配到的几率越大. server we ...

  6. [android] 表格布局和绝对布局

    /*****************2016年4月28日 更新*************************************/ 知乎:为什么Android没有像iOS一样提供autolay ...

  7. 阅读Java Native源码前的准备

    前言 读java native源代码时,我们一般会去网站下载openjdk8源码http://download.java.net/openjdk/jdk8/promoted/b132/openjdk- ...

  8. js的介绍 及用法 常量 变量!

    1.js介绍 js全程叫javascript,但不是java 他是一门前台语言 而java是后台语言. js的作者是布兰登 爱奇 前台语言:运行在客户端 后台语言:跟数据库有关的. 2.能干什么? 页 ...

  9. java并发编程小结

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/82078467 线程简介: 线程是操作系统调度 ...

  10. 三问助你Debug

    译者按: Debug也要三省吾身! 原文: Three Questions About Each Bug You Find 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版 ...