持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
写在前面
今天我们继续来解题,还是一道难度系数为简单的题目,《路径总和》。
这是一道关于二叉树的题目,所以要对二叉树这个数据结构有一定的理解,做完这道题,也可以让我们对二叉树有所了解了。
一起来看一下吧。
题目解读
从题目的标题来看,就是一个求和问题。
但是从题目的描述来看,这其实是一个二叉树中各节点的求和问题。
同时在代码模板中也给出了两个参数,一个是二叉树本数,一个是总值。
需要判断出二叉树中的路径包含的数字之和能否与总值相对应。
注意,这里有一个点要注意,是路径的数字之和,这里的路径是只从顶部到任何尾部才算的上是路径。
所以,这里的判断需要加入子节点是否为空的判断才行。
大概思路理清之后,我们来看一下具体的实现吧。
代码实现
本次的运行代码如下,很简洁,正确使用递归处理二叉树,绝对是非常好的选择。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root == null){
return false;
}
if(root.val == targetSum && root.left == null && root.right == null){
return true;
}
return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val);
}
}
执行结果:
今天的运行很满意,又快又简洁,几乎几行代码就解决了问题。
其他思路
很多大佬使用DFS算法之类的,我有点搞不动,大家有兴趣的自己去了解一下吧。
总结
今天的题目是关于二叉树的,使用的是递归的概念去处理了,考察的也自然是递归、二叉树两个点,还有不明白的吗?评论区见了。