这是悦乐书的第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. Linux配置2个或多个Tomcat同时运行

    一.问题说明今天操作Linux部署项目的时候,公司领导要求,只给一个服务器,但是有2个项目要部署,而且需要独立分开运行. 二.解决方法Linux配置两个或多个Tomcat,一个Tomcat对应部署一个 ...

  2. Postman Post请求上传文件

    Postman Post请求上传文件一.选择post请求方式,输入请求地址 二.填写Headers Key:Content-Type :Value:multipart/form-data 如下图 三. ...

  3. C# 只开启一个程序,如果第二次打开则自动将第一个程序显示到桌面

    using System; using System.Collections.Generic; using System.Windows.Forms; using System.Runtime.Int ...

  4. WPF: 实现带全选复选框的列表控件

    本文将说明如何创建一个带全选复选框的列表控件.其效果如下图:     这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都 ...

  5. Spring Bean的生命周期相关博客

    最近得面试题一直 问 Spring 得生命周期,鉴于自己还未阅读过源码 所以只能是自己 背一波了.属实不懂硬背得作用,但是无奈被各位面试官打败了.等以后有时间了 一定要阅读几遍spring的 源码 有 ...

  6. SpringMVC表单验证与Velocity整合

    阅读本文约“1.2分钟” 定义表单类 以Login为例,有username和password两个字段 import javax.validation.constraints.NotNull; impo ...

  7. redirection in linux

    2>&1 # Redirects stderr to stdout. # Error messages get sent to same place as standard output ...

  8. 弹性盒模型flex

    一.flex flex是flexible box的缩写,意为“弹性布局”: 定义弹性布局 display:flex; box{ display:flex; } 二.基本定义 我只简单的说一下容器和项目 ...

  9. osx安装sass

    1.安装ruby (1)OS X 缺少的套件管理工具 homebrew 的安装 http://brew.sh/index_zh-tw.html (2)通过homebrew安装ruby // 到文件夹 ...

  10. 6个小而美的es6新特性

    译者:动静若参商 译文:http://www.zcfy.cc/article/1795 原文:https://davidwalsh.name/es6-features JavaScript社区中的每个 ...