图解 | LeetCode #112 路径总和

Posted 程序员大咖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解 | LeetCode #112 路径总和相关的知识,希望对你有一定的参考价值。

????????关注后回复 “进群” ,拉你进程序员交流群????????

作者丨木兄

来源丨编程狂想曲

你好,我是微木。

今天分享的内容是LeetCode中112.路径总和 简单 这个题目。

题目描述:

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

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

示例1:

输入: root = 

[5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22

输出: true
示例2:

输入: root = [1,2,3], targetSum = 5
输出: false
思路分析
根据题意有两点需要明确:
一是判断是否存在由根节点到叶子节点的路径;
二是叶子节点是指没有子节点的结点。
递归求解
题目给出的题解方法如下:
public boolean hasPathSum(TreeNode root, int targetSum) {
}
二叉树有天然的递归属性,即根节点的左子树和其右子树,又可看做两个不同的二叉树。
而该方法的参数有两个一个是根节点root,一个是目标和targetSum。返回值是boolean类型,表示从给定的根节点root开始,到其叶子节点,是否存在一个路径,使得该路径上的所有节点和加起来等于targetSum。是的话,返回true;否,则返回false。
因此,该题目的一种求解思路是递归。
递归求解,一是需要明确递归函数,上述方法就是递归函数;二是需要明确递归终止条件,在这里,根据题目要求是需要遍历到叶子节点的,因此,递归终止条件就是当前节点为叶子节点时。
具体代码实现如下:

层序遍历求解
层序遍历(关于层序遍历的详细讲解可参考图解 | LeetCode #102 二叉树的层序遍历)求解的具体思路是:
定义两个队列,一个用来存放待考察节点;一个用来存放待考察节点到根节点这一路径上所有节点值的总和。
然后,开始遍历两个队列,当从存放待考察节点的队列取出的节点是根节点且从存放待考察节点到根节点这一路径上所有节点值的总和等于目标值targetSum时,说明找到了一个路径,返回true即可。
若当前节点不是根节点,则判断当前节点的左节点是否为空,如果不为空则将其左节点加入节点队列,同时将当前节点左节点的值加上其父节点到根节点这一路径上所有节点的值存入队列。
当前节点的右节点,同理。
动画演示:
以下图二叉树为例进行演示。

先将根节点3及其值3存入分别存入队列。

然后,开始遍历队列,取出节点3及其值3。这时节点3不是叶子节点,因此继续考察其左节点9和右节点20。分别将左节点9和右节点20存入节点队列。另,左节点9与其父节点的和为12,存入值队列;右节点20与其父节点的和为23存入值队列。

继续遍历队列,取出节点9及其到根节点3这一路径上所有节点的和12。这时,节点9是叶子节点且节点9及其到根节点3这一路径上所有节点的和12与目标值targetSum相同,因此返回true。

具体代码实现如下:

今天的分享就到这里了

错误或不足之处
欢迎留言指出
下一篇我们将学习新的内容,敬请期待
-End-
最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!



点击????卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

以上是关于图解 | LeetCode #112 路径总和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode112路径总和

LeetCode第112题—路径总和—Python实现

LeetCode 112. 路径总和c++/java详细题解

LeetCode-112-路径总和

Leetcode112.路径总和

leetcode算法112. 路径总和